浏览代码

fix:bugfix

caozixuan 1 年之前
父节点
当前提交
3f42463bcd

+ 46 - 51
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicRoleDataPermissionServiceImpl.java

@@ -33,12 +33,16 @@ import java.util.stream.Stream;
  */
 @Service
 public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDataPermissionMapper, BasicRoleDataPermission> implements BasicRoleDataPermissionService {
+
     @Resource
     SysPrivilegeService sysPrivilegeService;
+
     @Resource
     SysRoleService sysRoleService;
+
     @Resource
     SysUserService sysUserService;
+
     @Resource
     SysOrgService sysOrgService;
 
@@ -49,16 +53,12 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
         Object schoolIdObj = ServletUtil.getRequestHeaderSchoolIdByNotVaild();
         Long schoolId = schoolIdObj == null ? null : SystemConstant.convertIdToLong(String.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild()));
 
-        List<Long> privilegeIdList = dataPermissionInfoList.stream()
-                .map(DataPermissionInfo::getPrivilegeId)
-                .distinct()
+        List<Long> privilegeIdList = dataPermissionInfoList.stream().map(DataPermissionInfo::getPrivilegeId).distinct()
                 .collect(Collectors.toList());
 
         if (privilegeIdList.size() > 0) {
-            int count = sysPrivilegeService.count(new QueryWrapper<SysPrivilege>()
-                    .lambda()
-                    .ne(SysPrivilege::getType, PrivilegeEnum.MENU)
-                    .in(SysPrivilege::getId, privilegeIdList));
+            int count = sysPrivilegeService.count(
+                    new QueryWrapper<SysPrivilege>().lambda().ne(SysPrivilege::getType, PrivilegeEnum.MENU).in(SysPrivilege::getId, privilegeIdList));
 
             if (count > 0) {
                 throw ExceptionResultEnum.ERROR.exception("角色数据权限要绑在菜单级权限上");
@@ -71,8 +71,7 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             this.remove(basicRoleDataPermissionQueryWrapper);
 
             List<BasicRoleDataPermission> basicRoleDataPermissionList = dataPermissionInfoList.stream()
-                    .filter(e -> Objects.nonNull(e.getDataPermissionType()))
-                    .flatMap(e -> {
+                    .filter(e -> Objects.nonNull(e.getDataPermissionType())).flatMap(e -> {
                         BasicRoleDataPermission basicRoleDataPermission = new BasicRoleDataPermission();
                         basicRoleDataPermission.insertInfo(requestUser.getId());
                         basicRoleDataPermission.setSchoolId(schoolId);
@@ -87,17 +86,14 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
 
     @Override
     public List<DataPermissionInfo> findRoleDataPermissionInfo(Long roleId) {
-        return this.list(new QueryWrapper<BasicRoleDataPermission>().lambda()
-                        .eq(BasicRoleDataPermission::getRoleId, roleId))
-                .stream()
-                .flatMap(e -> {
+        return this.list(
+                        new QueryWrapper<BasicRoleDataPermission>().lambda().eq(BasicRoleDataPermission::getRoleId, roleId))
+                .stream().flatMap(e -> {
                     DataPermissionInfo dataPermissionInfo = new DataPermissionInfo();
                     dataPermissionInfo.setPrivilegeId(e.getPrivilegeId());
                     dataPermissionInfo.setDataPermissionType(e.getDataPermissionType());
                     return Stream.of(dataPermissionInfo);
-                })
-                .distinct()
-                .collect(Collectors.toList());
+                }).distinct().collect(Collectors.toList());
     }
 
     @Override
@@ -105,10 +101,8 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
 
         // 方法的权限
         SysPrivilege sysPrivilege = new SysPrivilege();
-        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(new QueryWrapper<SysPrivilege>()
-                .lambda()
-                .eq(SysPrivilege::getUrl, url)
-                .eq(SysPrivilege::getType, PrivilegeEnum.URL));
+        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(
+                new QueryWrapper<SysPrivilege>().lambda().eq(SysPrivilege::getUrl, url).eq(SysPrivilege::getType, PrivilegeEnum.URL));
         // url权限默认取第一条
         if (sysPrivilegeList.size() > 0) {
             sysPrivilege = sysPrivilegeList.get(0);
@@ -146,7 +140,8 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             // 数据库中存在该方法的url
             int maxWeight = 0;
             for (Long roleId : roleIdList) {
-                DataPermissionTypeEnum roleDataPermissionType = this.searchRoleDataPermissionByPrivilege(roleId, sysPrivilege, schoolId);
+                DataPermissionTypeEnum roleDataPermissionType = this.searchRoleDataPermissionByPrivilege(roleId,
+                        sysPrivilege, schoolId);
                 if (Objects.nonNull(roleDataPermissionType)) {
                     // 角色数据权限不为空时,筛选出所有角色在该url中的最大范围数据权限为该url的最终数据权限
                     int weight = roleDataPermissionType.getWeight();
@@ -160,23 +155,23 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
                 // 最终数据权限不为空
                 SysUser requestUser = sysUserService.getById(requestUserId);
                 switch (finalPermissionType) {
-                    case SELF:
-                        // 只能看自己创建的
-                        result.setRequestUserId(requestUserId);
-                        break;
-                    case SELF_ORG:
-                        // 只能看自己所在机构
-                        Long orgId = requestUser.getOrgId();
-                        Set<Long> orgIdSet = new HashSet<>();
-                        orgIdSet.add(orgId);
-                        result.setOrgIdSet(orgIdSet);
-                        break;
-                    case SELF_ORG_BELOW:
-                        // 只能看自己所在机构和所辖机构
-                        result.setOrgIdSet(sysOrgService.findDeepOrgIdListByUserId(requestUser.getId()));
-                        break;
-                    default:
-                        break;
+                case SELF:
+                    // 只能看自己创建的
+                    result.setRequestUserId(requestUserId);
+                    break;
+                case SELF_ORG:
+                    // 只能看自己所在机构
+                    Long orgId = requestUser.getOrgId();
+                    Set<Long> orgIdSet = new HashSet<>();
+                    orgIdSet.add(orgId);
+                    result.setOrgIdSet(orgIdSet);
+                    break;
+                case SELF_ORG_BELOW:
+                    // 只能看自己所在机构和所辖机构
+                    result.setOrgIdSet(sysOrgService.findDeepOrgIdListByUserId(requestUser.getId()));
+                    break;
+                default:
+                    break;
                 }
             }
         }
@@ -198,25 +193,25 @@ public class BasicRoleDataPermissionServiceImpl extends ServiceImpl<BasicRoleDat
             SysRole sysRole = sysRoleService.getById(roleId);
             QueryWrapper<BasicRoleDataPermission> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(BasicRoleDataPermission::getRoleId, roleId)
-                    .eq(BasicRoleDataPermission::getPrivilegeId, privilegeId);
-            if (sysRole.getDefaultRole()) {
-                queryWrapper.lambda().and(t -> t.isNull(BasicRoleDataPermission::getSchoolId).or()
-                        .eq(BasicRoleDataPermission::getSchoolId, schoolId));
-            } else {
-                queryWrapper.lambda().eq(BasicRoleDataPermission::getSchoolId, schoolId);
-            }
+                    .eq(BasicRoleDataPermission::getPrivilegeId, privilegeId)
+                    .eq(BasicRoleDataPermission::getSchoolId, schoolId);
             BasicRoleDataPermission basicRoleDataPermission = this.getOne(queryWrapper);
             if (Objects.nonNull(basicRoleDataPermission)) {
                 // 有数据权限
                 return basicRoleDataPermission.getDataPermissionType();
-            } else {
-                // 没数据权限查父菜单
-                return getDataPermissionRule(roleId, privilege, schoolId);
+            } else if (sysRole.getDefaultRole()) {
+                // 查询默认
+                BasicRoleDataPermission defaultBasicRoleDataPermission = this.getOne(new QueryWrapper<BasicRoleDataPermission>().lambda()
+                        .eq(BasicRoleDataPermission::getRoleId, roleId)
+                        .eq(BasicRoleDataPermission::getPrivilegeId, privilegeId).isNull(BasicRoleDataPermission::getSchoolId));
+                if (Objects.nonNull(defaultBasicRoleDataPermission)) {
+                    // 有数据权限
+                    return defaultBasicRoleDataPermission.getDataPermissionType();
+                }
             }
-        } else {
-            // 如果该url不是菜单类型则查询其父目录
-            return getDataPermissionRule(roleId, privilege, schoolId);
         }
+        // 如果该url不是菜单类型则查询其父目录
+        return getDataPermissionRule(roleId, privilege, schoolId);
     }
 
     /**