Răsfoiți Sursa

3.2.7 修改内置角色绑定菜单数据查询,去掉该数据缓存

xiaofei 1 an în urmă
părinte
comite
963d5004b5

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/backup/MySQLDatabaseBackup.java

@@ -223,7 +223,7 @@ public class MySQLDatabaseBackup {
                 if (!CollectionUtils.isEmpty(sysRoleList)) {
                     for (SysRole s : sysRoleList) {
                         commonCacheService.removeRoleCache(s.getId());
-                        commonCacheService.removeRolePrivilegeCache(s.getId());
+//                        commonCacheService.removeRolePrivilegeCache(schoolId, s.getId());
                     }
                 }
 

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysAdminSetController.java

@@ -333,7 +333,7 @@ public class SysAdminSetController {
         if (!CollectionUtils.isEmpty(roleSetIds)) {
             for (Long l : roleSetIds) {
                 commonCacheService.removeRoleCache(l);
-                commonCacheService.removeRolePrivilegeCache(l);
+//                commonCacheService.removeRolePrivilegeCache(tSchoolPrivilegeParam.getSchoolId(), l);
                 //绑定该角色的用户都需要清除鉴权缓存
                 List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(l);
                 for (SysUserRole s : sysUserRoleList) {

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/SysPrivilegeController.java

@@ -110,9 +110,9 @@ public class SysPrivilegeController {
 
         SysRolePrivilegeParams result = new SysRolePrivilegeParams();
         // 该角色拥有的权限集合
-        List<SysRolePrivilege> sysRolePrivilegeList = sysPrivilegeService.getRolePrivileges(sysRole);
+        Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : null;
+        List<SysRolePrivilege> sysRolePrivilegeList = sysPrivilegeService.getRolePrivileges(schoolId, sysRole);
         if (!CollectionUtils.isEmpty(sysRolePrivilegeList)) {
-            Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : null;
             List<String> privilegeIds;
             if (schoolId == null && sysRole.getDefaultRole()) {
                 privilegeIds = sysRolePrivilegeList.stream().filter(m -> m.getSchoolId() == null).map(m -> String.valueOf(m.getPrivilegeId())).collect(Collectors.toList());

+ 3 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/CommonCacheService.java

@@ -233,7 +233,7 @@ public interface CommonCacheService {
      * @param roleId
      * @return
      */
-    public List<SysRolePrivilege> rolePrivilegeCache(Long roleId);
+    public List<SysRolePrivilege> rolePrivilegeCache(Long schoolId, Long roleId);
 
     /**
      * 修改角色权限缓存
@@ -241,14 +241,14 @@ public interface CommonCacheService {
      * @param roleId
      * @return
      */
-    public List<SysRolePrivilege> updateRolePrivilegeCache(Long roleId);
+    public List<SysRolePrivilege> updateRolePrivilegeCache(Long schoolId, Long roleId);
 
     /**
      * 删除角色权限缓存
      *
      * @param roleId
      */
-    public void removeRolePrivilegeCache(Long roleId);
+    public void removeRolePrivilegeCache(Long schoolId, Long roleId);
 
     /**
      * 添加用户角色权限缓存

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java

@@ -32,7 +32,7 @@ public interface SysPrivilegeService extends IService<SysPrivilege> {
 
     boolean remove(Long id);
 
-    List<SysRolePrivilege> getRolePrivileges(SysRole sysRole);
+    List<SysRolePrivilege> getRolePrivileges(Long schoolId, SysRole sysRole);
 
     List<PrivilegeDto> listPrivilegeTreeAuth();
 

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -74,7 +74,7 @@ public interface TeachcloudCommonService {
      * @param roleId
      * @return
      */
-    public List<SysRolePrivilege> getRolePrivilege(Long roleId);
+    public List<SysRolePrivilege> getRolePrivilege(Long schoolId, Long roleId);
 
     /**
      * 获取用户权限

+ 8 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/CommonCacheServiceImpl.java

@@ -384,9 +384,9 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p0", unless = "#result == null")
-    public List<SysRolePrivilege> rolePrivilegeCache(Long roleId) {
-        return commonService.getRolePrivilege(roleId);
+//    @Cacheable(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p1+'-'+#p0", unless = "#result == null")
+    public List<SysRolePrivilege> rolePrivilegeCache(Long schoolId, Long roleId) {
+        return commonService.getRolePrivilege(schoolId, roleId);
     }
 
     /**
@@ -396,9 +396,9 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p0", condition = "#result != null")
-    public List<SysRolePrivilege> updateRolePrivilegeCache(Long roleId) {
-        return commonService.getRolePrivilege(roleId);
+    @CachePut(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p1+'-'+#p0", condition = "#result != null")
+    public List<SysRolePrivilege> updateRolePrivilegeCache(Long schoolId, Long roleId) {
+        return commonService.getRolePrivilege(schoolId, roleId);
     }
 
     /**
@@ -407,8 +407,8 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param roleId
      */
     @Override
-    @CacheEvict(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p0")
-    public void removeRolePrivilegeCache(Long roleId) {
+    @CacheEvict(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p1+'-'+#p0")
+    public void removeRolePrivilegeCache(Long schoolId, Long roleId) {
 
     }
 

+ 2 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java

@@ -165,9 +165,9 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
     }
 
     @Override
-    public List<SysRolePrivilege> getRolePrivileges(SysRole sysRole) {
+    public List<SysRolePrivilege> getRolePrivileges(Long schoolId, SysRole sysRole) {
 
-        return commonCacheService.rolePrivilegeCache(sysRole.getId());
+        return commonCacheService.rolePrivilegeCache(schoolId, sysRole.getId());
     }
 
     @Override

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRolePrivilegeServiceImpl.java

@@ -45,7 +45,7 @@ public class SysRolePrivilegeServiceImpl extends ServiceImpl<SysRolePrivilegeMap
     public boolean saveBatch(SysRole role) {
         Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : null;
 
-        List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(role.getId());
+        List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(schoolId, role.getId());
         if (schoolId == null && role.getDefaultRole()) {
             sysRolePrivilegeList = sysRolePrivilegeList.stream().filter(m -> m.getSchoolId() == null).collect(Collectors.toList());
         }

+ 5 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRoleServiceImpl.java

@@ -131,7 +131,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                 commonCacheService.updateRoleCache(role.getId());
                 boolean isChange = sysRolePrivilegeService.saveBatch(role);//角色权限
                 if (isChange) {
-                    commonCacheService.updateRolePrivilegeCache(role.getId());
+//                    commonCacheService.removeRolePrivilegeCache(schoolId, role.getId());
                     //绑定该角色的用户都需要清除鉴权缓存
                     List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(role.getId());
                     commonService.removeUserInfoBatch(sysUserRoleList.stream().map(SysUserRole::getUserId).collect(Collectors.toList()), true);
@@ -192,7 +192,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                 throw ExceptionResultEnum.ERROR.exception("自定义角色名称不能和系统默认角色[" + roleName + "]同名");
             }
             if (Objects.nonNull(role.getId())) {//编辑
-                List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(role.getId());
+                List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(sysUser.getSchoolId(), role.getId());
                 QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
                 sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, role.getPrivilegeIds());
                 List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
@@ -218,7 +218,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
                     // 删除权限前先更新涉及特殊权限用户 -> 需要重新同步
                     sysRolePrivilegeService.removeByRoleId(role.getId());
                     sysRolePrivilegeService.saveBatch(role);//角色权限
-                    commonCacheService.updateRolePrivilegeCache(role.getId());
+//                    commonCacheService.updateRolePrivilegeCache(schoolId, role.getId());
                     //绑定该角色的用户都需要清除鉴权缓存
                     List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(role.getId());
                     commonService.removeUserInfoBatch(sysUserRoleList.stream().map(s -> s.getUserId()).collect(Collectors.toList()), true);
@@ -298,7 +298,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         sysRoleGroupMemberService.remove(sysRoleGroupMemberQueryWrapper);
 
         commonCacheService.removeRoleCache(id);
-        commonCacheService.removeRolePrivilegeCache(id);
+//        commonCacheService.removeRolePrivilegeCache(sysRole.getSchoolId(), id);
         return true;
     }
 
@@ -314,7 +314,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         this.removeById(id);
 
         commonCacheService.removeRoleCache(id);
-        commonCacheService.removeRolePrivilegeCache(id);
+//        commonCacheService.removeRolePrivilegeCache(sysRole.getSchoolId(), id);
         return true;
     }
 

+ 9 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -116,7 +116,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         for (SysUserRole s : sysUserRoleList) {
             SysRole sysRole = commonCacheService.roleCache(s.getRoleId());
             if (Objects.nonNull(sysRole) && sysRole.getEnable()) {
-                sysRolePrivilegeList.addAll(commonCacheService.rolePrivilegeCache(s.getRoleId()));
+                sysRolePrivilegeList.addAll(commonCacheService.rolePrivilegeCache(sysUser.getSchoolId(), s.getRoleId()));
             }
         }
         Set<Long> privilegeIds = sysRolePrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
@@ -187,7 +187,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      */
     @Override
     public void addUserRolePrivilege(SysUser sysUser, Long roleId) {
-        List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(roleId);
+        List<SysRolePrivilege> sysRolePrivilegeList = commonCacheService.rolePrivilegeCache(sysUser.getSchoolId(), roleId);
         List<SysUserRole> sysUserRoleList = new ArrayList<>();
         sysRolePrivilegeList.forEach(s -> {
             sysUserRoleList.add(new SysUserRole(sysUser.getId(), s.getRoleId(), s.getPrivilegeId()));
@@ -241,9 +241,14 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      * @return
      */
     @Override
-    public List<SysRolePrivilege> getRolePrivilege(Long roleId) {
+    public List<SysRolePrivilege> getRolePrivilege(Long schoolId, Long roleId) {
         QueryWrapper<SysRolePrivilege> sysRolePrivilegeQueryWrapper = new QueryWrapper<>();
         sysRolePrivilegeQueryWrapper.lambda().eq(SysRolePrivilege::getRoleId, roleId);
+        if (schoolId == null) {
+            sysRolePrivilegeQueryWrapper.lambda().isNull(SysRolePrivilege::getSchoolId);
+        } else {
+            sysRolePrivilegeQueryWrapper.lambda().and(t -> t.isNull(SysRolePrivilege::getSchoolId).or().eq(SysRolePrivilege::getSchoolId, schoolId));
+        }
         return sysRolePrivilegeService.list(sysRolePrivilegeQueryWrapper);
     }
 
@@ -268,7 +273,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                 Set<Long> roleIds = sysUserRoleList.stream().map(s -> s.getRoleId()).collect(Collectors.toSet());
                 List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
                 for (Long l : roleIds) {
-                    sysRolePrivilegeList.addAll(commonCacheService.rolePrivilegeCache(l));
+                    sysRolePrivilegeList.addAll(commonCacheService.rolePrivilegeCache(user.getSchoolId(), l));
                 }
                 Set<Long> privilegeIds = sysRolePrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
                 QueryWrapper<SysRole> sysRoleQueryWrapper = new QueryWrapper<>();

+ 4 - 1
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysPrivilegeController.java

@@ -9,6 +9,7 @@ import com.qmth.teachcloud.common.service.SysPrivilegeService;
 import com.qmth.teachcloud.common.service.SysRoleService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -93,7 +95,8 @@ public class SysPrivilegeController {
     @RequestMapping(value = "/get_role_privileges", method = RequestMethod.POST)
     public Result getRolePrivileges(@RequestParam(value = "roleId", required = true) Long roleId) {
         SysRole sysRole = sysRoleService.getById(roleId);
-        List<SysRolePrivilege> sysRolePrivilegeList = sysPrivilegeService.getRolePrivileges(sysRole);
+        Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : null;
+        List<SysRolePrivilege> sysRolePrivilegeList = sysPrivilegeService.getRolePrivileges(schoolId, sysRole);
         List<String> privilegeIds = sysRolePrivilegeList.stream().map(m -> String.valueOf(m.getPrivilegeId())).collect(Collectors.toList());
         return ResultUtil.ok(privilegeIds);
     }