Browse Source

1、更改企业用户权限效验逻辑

rayson 1 year ago
parent
commit
9418211402

+ 1 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/enterprise/EnterpriseUserTypeEnum.java

@@ -13,7 +13,7 @@ public enum EnterpriseUserTypeEnum {
     NORMAL("0", "普通企业用户"),
     ADMIN("1", "企业管理员");
 
-    final String name;
     final String type;
+    final String name;
 
 }

+ 1 - 5
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/permission/MdeDefaultRoleEnum.java

@@ -11,14 +11,10 @@ public enum MdeDefaultRoleEnum {
      * 内置角色
      */
     MENDUNER_DEFAULT_ROLE("menduner_default_role"),
-    /**
-     * 企业管理员
-     */
-    MENDUNER_ENTERPRISE_ROLE("menduner_enterprise_role"),
     /**
      * 企业用户
      */
-    MENDUNER_ENTERPRISE_USER_ROLE("menduner_enterprise_user_role");
+    MENDUNER_ENTERPRISE_ROLE("menduner_enterprise_role");
 
     private final String type;
 

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/user/EnterpriseUserApplyServiceImpl.java

@@ -142,7 +142,7 @@ public class EnterpriseUserApplyServiceImpl implements EnterpriseUserApplyServic
 
         // 审批通过更改用户绑定角色
         // 绑定企业用户
-        permissionService.assignUserRoleByDefault(userApplyDO.getUserId(), MdeDefaultRoleEnum.MENDUNER_ENTERPRISE_USER_ROLE);
+        permissionService.assignUserRoleByDefault(userApplyDO.getUserId(), MdeDefaultRoleEnum.MENDUNER_ENTERPRISE_ROLE);
     }
 
     @Override

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

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseUserBindDO;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import com.citu.framework.common.util.collection.CollectionUtils;
 import com.citu.framework.datapermission.core.annotation.DataPermission;
@@ -13,6 +14,7 @@ import com.citu.module.menduner.system.dal.dataobject.permission.MdeUserRoleDO;
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
 import com.citu.module.menduner.system.dal.mysql.permission.MdeUserRoleMapper;
 import com.citu.module.menduner.system.dal.redis.RedisKeyConstants;
+import com.citu.module.menduner.system.enums.enterprise.EnterpriseUserTypeEnum;
 import com.citu.module.menduner.system.enums.permission.MdeDefaultRoleEnum;
 import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
@@ -220,7 +222,7 @@ public class MdePermissionServiceImpl implements MdePermissionService {
         }
 
         // 获得用户的部门编号的缓存,通过 Guava 的 Suppliers 惰性求值,即有且仅有第一次发起 DB 的查询
-        Supplier<Long> enterpriseId = Suppliers.memoize(() -> enterpriseUserBindService.getEnterpriseUserBindById(userId).getEnterpriseId());
+        EnterpriseUserBindDO enterpriseUserBind =   enterpriseUserBindService.getEnterpriseUserBindById(userId);
         // 遍历每个角色,计算
         for (MdeRoleDO role : roles) {
             // 为空时,跳过
@@ -237,24 +239,30 @@ public class MdePermissionServiceImpl implements MdePermissionService {
                 CollUtil.addAll(result.getDataIds(), role.getDataScopeDeptIds());
                 // 自定义可见部门时,保证可以看到自己所在的部门。否则,一些场景下可能会有问题。
                 // 例如说,登录时,基于 t_user 的 username 查询会可能被 dept_id 过滤掉
-                CollUtil.addAll(result.getDataIds(), enterpriseId.get());
+                CollUtil.addAll(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
                 continue;
             }
             // 情况三,DEPT_ONLY 自己所在的数据权限
             if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_ONLY.getScope())) {
-                CollectionUtils.addIfNotNull(result.getDataIds(), enterpriseId.get());
+                CollectionUtils.addIfNotNull(result.getDataIds(), enterpriseUserBind.getEnterpriseId());
                 continue;
             }
             // 情况四,DEPT_DEPT_AND_CHILD 自己所在及以下的数据权限
             if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_AND_CHILD.getScope())) {
-                CollUtil.addAll(result.getDataIds(), enterpriseService.getChildEnterpriseIdListFromCache(enterpriseId.get()));
+                CollUtil.addAll(result.getDataIds(), enterpriseService
+                        .getChildEnterpriseIdListFromCache(enterpriseUserBind.getEnterpriseId()));
                 // 添加本身部门编号
-                CollUtil.addAll(result.getDataIds(), enterpriseId.get());
+                CollUtil.addAll(result.getDataIds(), enterpriseUserBind
+                        .getEnterpriseId());
                 continue;
             }
             // 情况五,SELF
             if (Objects.equals(role.getDataScope(), DataScopeEnum.SELF.getScope())) {
-                result.setSelf(true);
+                if(!EnterpriseUserTypeEnum.ADMIN.getType()
+                        .equals(enterpriseUserBind.getUserType())) {
+                    // 管理员 包含所有权限, 所以不加入自己的id权限
+                    result.setSelf(true);
+                }
                 continue;
             }
             // 未知情况,error log 即可