瀏覽代碼

1、开启权限

rayson 9 月之前
父節點
當前提交
c03dca43f8

+ 11 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/config/permission/CustomDataPermissionRule.java

@@ -133,8 +133,15 @@ public class CustomDataPermissionRule implements DataPermissionRule {
         }
         // // 目前,如果有指定数据 + 可查看自己,采用 OR 条件。即,WHERE (xx_id IN ? OR user_id = ?)
         // return new Parenthesis(new OrExpression(dataExpression, userExpression));
-        // 改为 AND 条件。即,WHERE (xx_id IN ? and user_id = ?)
-        return new ParenthesedExpressionList(new OrExpression(dataExpression, userExpression));
+        if(dataPermission.getSelf()) {
+            // 当前本人权限
+            // 改为 AND 条件。即,WHERE (xx_id IN ? and user_id = ?)
+            return new ParenthesedExpressionList<>(new AndExpression(dataExpression, userExpression));
+        }else {
+            // 其他情况
+            // 改为 or 条件。即,WHERE (xx_id IN ? or user_id = ?) 兼容其他情况
+            return new ParenthesedExpressionList<>(new OrExpression(dataExpression, userExpression));
+        }
     }
 
     private Expression buildDataExpression(String tableName, Alias tableAlias, Set<Long> dataIds) {
@@ -149,7 +156,8 @@ public class CustomDataPermissionRule implements DataPermissionRule {
         }
         // 拼接条件
         return new InExpression(MyBatisUtils.buildColumn(tableName, tableAlias, columnName),
-                new ParenthesedExpressionList<>(CollectionUtils.convertList(dataIds, LongValue::new)));
+                // Parenthesis 的目的,是提供 (1,2,3) 的 () 左右括号
+                new ParenthesedExpressionList(new ExpressionList<LongValue>(CollectionUtils.convertList(dataIds, LongValue::new))));
     }
 
     private Expression buildUserExpression(String tableName, Alias tableAlias, Boolean self, Long userId) {

+ 15 - 15
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/datapermission/config/DataPermissionConfiguration.java

@@ -21,21 +21,21 @@ public class DataPermissionConfiguration {
     public CustomDataPermissionRuleCustomizer customDataPermissionRuleCustomizer() {
         return rule -> {
 
-//            // 招聘职位表 where enterprise_id = xx and user_id = xx
-//            rule.addDataColumn(JobAdvertisedDO.class);
-//            rule.addUserColumn(JobAdvertisedDO.class);
-//
-//            // 简历投递表 where  enterprise_id = xx and publish_user_id = xx
-//            rule.addDataColumn(JobCvRelDO.class);
-//            rule.addUserColumn(JobCvRelDO.class, "publish_user_id");
-//
-//            // 面试邀约表 where enterprise_id = xx and invite_user_id = xx
-//            rule.addDataColumn(InterviewInviteDO.class);
-//            rule.addUserColumn(InterviewInviteDO.class, "invite_user_id");
-//
-//            // 交易订单表 where enterprise_id = xx and invite_user_id = xx
-//            rule.addDataColumn(TradeOrderDO.class);
-//            rule.addUserColumn(TradeOrderDO.class);
+            // 招聘职位表 where enterprise_id = xx and user_id = xx
+            rule.addDataColumn(JobAdvertisedDO.class);
+            rule.addUserColumn(JobAdvertisedDO.class);
+
+            // 简历投递表 where  enterprise_id = xx and publish_user_id = xx
+            rule.addDataColumn(JobCvRelDO.class);
+            rule.addUserColumn(JobCvRelDO.class, "publish_user_id");
+
+            // 面试邀约表 where enterprise_id = xx and invite_user_id = xx
+            rule.addDataColumn(InterviewInviteDO.class);
+            rule.addUserColumn(InterviewInviteDO.class, "invite_user_id");
+
+            // 交易订单表 where enterprise_id = xx and invite_user_id = xx
+            rule.addDataColumn(TradeOrderDO.class);
+            rule.addUserColumn(TradeOrderDO.class);
         };
     }
 

+ 14 - 14
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/permission/MdePermissionServiceImpl.java

@@ -323,14 +323,16 @@ public class MdePermissionServiceImpl implements MdePermissionService {
         List<MdeRoleDO> roles = getEnableUserRoleListByUserIdFromCache(enterpriseId, userId);
         // 如果角色为空,则只能查看自己
         if (CollUtil.isEmpty(roles)) {
-            result.setSelf(true);
+            // 添加本身企业编号
+            CollUtil.addAll(result.getDataIds(), enterpriseUserBind
+                    .getEnterpriseId());
             if(enterpriseUserBindService.checkIsAdmin(enterpriseUserBind)) {
                 // 管理员 数据权限是 当前企业以及下级
                 CollUtil.addAll(result.getDataIds(), enterpriseService
                         .getChildEnterpriseIdListFromCache(enterpriseUserBind.getEnterpriseId()));
-                // 添加本身企业编号
-                CollUtil.addAll(result.getDataIds(), enterpriseUserBind
-                        .getEnterpriseId());
+            }else {
+                // 普通用户默认只能看到自己的权限
+                result.setSelf(true);
             }
             return result;
         }
@@ -346,20 +348,22 @@ public class MdePermissionServiceImpl implements MdePermissionService {
                 result.setAll(true);
                 continue;
             }
-            // 情况二,DEPT_CUSTOM 自定义
+            // 情况二,ENTERPRISE_CUSTOM 自定义
             if (Objects.equals(role.getDataScope(), MdeDataScopeEnum.ENTERPRISE_CUSTOM.getScope())) {
                 CollUtil.addAll(result.getDataIds(), role.getDataScopeEnterpriseIds());
                 // 自定义可见企业时,保证可以看到自己所在的企业。否则,一些场景下可能会有问题。
                 // 例如说,登录时,基于 t_user 的 username 查询会可能被 dept_id 过滤掉
-                CollUtil.addAll(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
+                // 例如说,可以看到指定企业,但是不可见自己所在的企业,然后呢登录查询数据,肯定会查自己企业的数据的,这个时候被过滤掉就会有问题
+                // TODO 注释掉,因为目前逻辑没有对企业表数据进行控制,所以自定义不需要考虑加入自己企业的数据
+                // CollUtil.addAll(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
                 continue;
             }
-            // 情况三,DEPT_ONLY 自己所在的数据权限
+            // 情况三,ENTERPRISE_ONLY 自己所在的数据权限
             if (Objects.equals(role.getDataScope(), MdeDataScopeEnum.ENTERPRISE_ONLY.getScope())) {
                 CollectionUtils.addIfNotNull(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
                 continue;
             }
-            // 情况四,DEPT_DEPT_AND_CHILD 自己所在及以下的数据权限
+            // 情况四,ENTERPRISE_AND_CHILD 自己所在及以下的数据权限
             if (Objects.equals(role.getDataScope(), MdeDataScopeEnum.ENTERPRISE_AND_CHILD.getScope())) {
                 CollUtil.addAll(result.getDataIds(), enterpriseService
                         .getChildEnterpriseIdListFromCache(enterpriseUserBind.getEnterpriseId()));
@@ -370,12 +374,8 @@ public class MdePermissionServiceImpl implements MdePermissionService {
             }
             // 情况五,SELF
             if (Objects.equals(role.getDataScope(), MdeDataScopeEnum.SELF.getScope())) {
-                //                if (!EnterpriseUserTypeEnum.ADMIN.getType()
-                //                        .equals(enterpriseUserBind.getUserType())) {
-                //                    // 不是管理员,加入自己的权限
-                //                    result.setSelf(true);
-                //                }
-                // 20240718 更改 所有用户都只能看到自己的数据
+                // 所有用户都只能看到当前自己企业的数据
+                CollUtil.addAll(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
                 result.setSelf(true);
                 continue;
             }