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