Przeglądaj źródła

update 权限实时更新

A17404李放 3 lat temu
rodzic
commit
c86832ecaa

+ 0 - 5
nb-admin/src/main/java/com/nb/admin/controller/system/SysLoginController.java

@@ -9,14 +9,12 @@ import com.nb.common.dto.LoginDTO;
 import com.nb.common.exception.CustomException;
 import com.nb.common.result.R;
 import com.nb.common.util.SecurityUtil;
-import com.nb.framework.config.SaTokenConfig;
 import com.nb.framework.web.service.IUserService;
 import com.nb.system.common.vo.AccountInfoVO;
 import com.nb.system.entity.SysUser;
 import com.nb.system.service.ISysUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -45,8 +43,6 @@ public class SysLoginController {
 
     @Value("${sa-token.token-name}")
     private String tokenName;
-    @Value("${sa-token.timeout}")
-    private String timeout;
     @Value("${sa-token.activity-timeout}")
     private String activityTimeout;
     @Log(title = "登录")
@@ -57,7 +53,6 @@ public class SysLoginController {
         JSONObject result = new JSONObject();
         result.put("token", token);
         result.put("tokenName",tokenName);
-        result.put("timeout",timeout);
         result.put("activityTimeout",activityTimeout);
         return R.success(result);
     }

+ 4 - 1
nb-admin/src/test/java/com/nb/admin/BusClinicTest.java

@@ -1,5 +1,6 @@
 package com.nb.admin;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -96,8 +97,10 @@ private LocalBusDocService docService;
     }
 
 
+    @Test
     public void publish(){
-
+        List<String> tokenValueListByLoginId = StpUtil.getTokenValueListByLoginId(1);
+        System.out.println(tokenValueListByLoginId);
     }
 
 }

+ 1 - 0
nb-framework/src/main/java/com/nb/framework/config/SaTokenConfig.java

@@ -39,6 +39,7 @@ public class SaTokenConfig {
         IGNORE_URL.add("/sys/app/get");
         IGNORE_URL.add("/index");
         IGNORE_URL.add("/login");
+        IGNORE_URL.add("/token");
         IGNORE_URL.add("/logout");
         IGNORE_URL.add("/common/**");
         IGNORE_URL.add("/*.html");

+ 5 - 1
nb-system/src/main/java/com/nb/system/service/impl/LocalSysApplyService.java

@@ -66,6 +66,10 @@ public class LocalSysApplyService extends BaseService<SysApplyMapper, SysApply,S
     @Transactional(rollbackFor = Exception.class)
     public boolean save(SysApply entity) {
         synchronized (LocalSysApplyService.class){
+            long count = this.count();
+            if (count >= 10) {
+                throw new CustomException("同一医院下appKey最多可创建10个");
+            }
             boolean validate=false;
             String appKey = null;
             for (int i = 0; i < 10; i++) {
@@ -106,7 +110,7 @@ public class LocalSysApplyService extends BaseService<SysApplyMapper, SysApply,S
                 sysApplyMenu.setMenuId(item);
                 return sysApplyMenu;
             }).collect(Collectors.toList()));
-
+            //刷新权限
             applyManager.refreshPermission(req.getAppKey());
         }
     }

+ 22 - 5
nb-system/src/main/java/com/nb/system/service/impl/SysRoleServiceImpl.java

@@ -1,5 +1,7 @@
 package com.nb.system.service.impl;
 
+import cn.dev33.satoken.session.SaSession;
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -9,6 +11,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.nb.common.Constants;
+import com.nb.common.bo.LoginUser;
 import com.nb.common.enums.MenuTypeEnum;
 import com.nb.common.enums.StatusEnum;
 import com.nb.common.exception.CustomException;
@@ -26,10 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -158,7 +159,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void assignMenu(SysRoleAssignMenuDTO req) {
-        // 删除角色和菜单关联
+        //判断角色蔬菜单是否发生变化
         sysRoleMenuService.remove(Wrappers.lambdaQuery(SysRoleMenu.class).eq(SysRoleMenu::getRoleId, req.getRoleId()));
         // 新增角色和菜单关联
         if (Objects.nonNull(req.getMenuIds())) {
@@ -169,6 +170,22 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                 return sysRoleMenu;
             }).collect(Collectors.toList()));
         }
+        //分配菜单后将对应的在线人员进行更新
+        List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getRoleId, req.getRoleId()));
+        userRoleList.parallelStream()
+                .forEach(sysUserRole -> {
+                    Set<String> permissionsByUserId = sysMenuService.getPermissionsByUserId(sysUserRole.getUserId());
+                    List<String> tokens = StpUtil.getTokenValueListByLoginId(sysUserRole.getUserId());
+                    tokens.parallelStream()
+                            .forEach(token->{
+                                SaSession tokenSessionByToken = StpUtil.getTokenSessionByToken(token);
+                                LoginUser user = (LoginUser) tokenSessionByToken.get(Constants.LOGIN_USER_KEY);
+                                if(user!=null){
+                                    user.setPermissions(permissionsByUserId);
+                                    tokenSessionByToken.set(Constants.LOGIN_USER_KEY,user);
+                                }
+                            });
+                });
     }
 
     @Override

+ 27 - 8
nb-system/src/main/java/com/nb/system/service/impl/SysUserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.nb.system.service.impl;
 
 import cn.dev33.satoken.exception.NotPermissionException;
+import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
@@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.nb.common.Constants;
 import com.nb.common.bo.LoginUser;
+import com.nb.common.bo.SysRoleBO;
 import com.nb.common.enums.StatusEnum;
 import com.nb.common.enums.YesNoEnum;
 import com.nb.common.exception.CustomException;
@@ -19,15 +21,9 @@ import com.nb.system.common.dto.SysUserAddDTO;
 import com.nb.system.common.dto.SysUserEditDTO;
 import com.nb.system.common.dto.SysUserQueryDTO;
 import com.nb.system.common.dto.SysUserResetPwdDTO;
-import com.nb.system.entity.SysDept;
-import com.nb.system.entity.SysUser;
-import com.nb.system.entity.SysUserPost;
-import com.nb.system.entity.SysUserRole;
+import com.nb.system.entity.*;
 import com.nb.system.mapper.SysUserMapper;
-import com.nb.system.service.ISysDeptService;
-import com.nb.system.service.ISysUserPostService;
-import com.nb.system.service.ISysUserRoleService;
-import com.nb.system.service.ISysUserService;
+import com.nb.system.service.*;
 import lombok.SneakyThrows;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.stereotype.Service;
@@ -38,6 +34,7 @@ import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
@@ -61,6 +58,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     private ISysDeptService sysDeptService;
 
+    @Resource
+    private ISysMenuService sysMenuService;
+
+    @Resource
+    private ISysRoleService sysRoleService;
+
+
     @Override
     public IPage<SysUser> page(Page reqPage, SysUserQueryDTO req) {
         List<SysDept> sysDeptList = Lists.newArrayList();
@@ -219,6 +223,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 return sysUserRole;
             }).collect(Collectors.toList());
             sysUserRoleService.saveBatch(sysUserRoleList);
+
+            //更新缓存用户权限信息
+            Set<String> permissionsByUserId = sysMenuService.getPermissionsByUserId(req.getId());
+            List<String> tokens = StpUtil.getTokenValueListByLoginId(req.getId());
+            List<SysRole> sysRoleList = sysRoleService.listSysRoleByUserId(req.getId());
+            tokens.parallelStream()
+                    .forEach(token->{
+                        SaSession tokenSessionByToken = StpUtil.getTokenSessionByToken(token);
+                        LoginUser user = (LoginUser) tokenSessionByToken.get(Constants.LOGIN_USER_KEY);
+                        if(user!=null){
+                            user.setPermissions(permissionsByUserId);
+                            user.getSysUser().setRoles(sysRoleList.stream().map(item -> BeanUtil.copyProperties(item, SysRoleBO.class)).collect(Collectors.toList()));
+                            tokenSessionByToken.set(Constants.LOGIN_USER_KEY,user);
+                        }
+                    });
         }
     }