1. 新增 permissionApi 查询当前用户权限级别的方法
This commit is contained in:
@@ -6,6 +6,7 @@ import com.zt.plat.framework.common.util.object.BeanUtils;
|
||||
import com.zt.plat.module.system.api.permission.dto.*;
|
||||
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO;
|
||||
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO;
|
||||
import com.zt.plat.module.system.enums.permission.DataScopeEnum;
|
||||
import com.zt.plat.module.system.service.permission.PermissionService;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -65,6 +66,11 @@ public class PermissionApiImpl implements PermissionApi {
|
||||
return success(permissionService.getUserRoleIdListByUserIdFromCache(userId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<DataScopeEnum> getUserDataPermissionLevel(Long userId) {
|
||||
return success(permissionService.getUserDataPermissionLevel(userId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> hasAnyPermissions(Long userId, String... permissions) {
|
||||
return success(permissionService.hasAnyPermissions(userId, permissions));
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zt.plat.module.system.service.permission;
|
||||
|
||||
import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO;
|
||||
import com.zt.plat.module.system.enums.permission.DataScopeEnum;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
@@ -143,4 +144,12 @@ public interface PermissionService {
|
||||
*/
|
||||
DeptDataPermissionRespDTO getDeptDataPermission(Long userId);
|
||||
|
||||
/**
|
||||
* 获得用户的数据权限级别
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @return 数据权限范围枚举
|
||||
*/
|
||||
DataScopeEnum getUserDataPermissionLevel(Long userId);
|
||||
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.zt.plat.module.system.enums.permission.RoleTypeEnum;
|
||||
import com.zt.plat.module.system.service.dept.DeptService;
|
||||
import com.zt.plat.module.system.service.user.AdminUserService;
|
||||
import com.zt.plat.module.system.service.userdept.UserDeptService;
|
||||
import com.zt.plat.framework.tenant.core.aop.TenantIgnore;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -57,6 +58,15 @@ import static com.zt.plat.module.system.enums.ErrorCodeConstants.ROLE_CAN_NOT_UP
|
||||
@Slf4j
|
||||
public class PermissionServiceImpl implements PermissionService {
|
||||
|
||||
private static final List<DataScopeEnum> DATA_SCOPE_PRIORITY = Arrays.asList(
|
||||
DataScopeEnum.ALL,
|
||||
DataScopeEnum.COMPANY_AND_DEPT,
|
||||
DataScopeEnum.DEPT_AND_CHILD,
|
||||
DataScopeEnum.DEPT_ONLY,
|
||||
DataScopeEnum.DEPT_CUSTOM,
|
||||
DataScopeEnum.SELF
|
||||
);
|
||||
|
||||
@Resource
|
||||
private RoleMenuMapper roleMenuMapper;
|
||||
@Resource
|
||||
@@ -404,6 +414,40 @@ public class PermissionServiceImpl implements PermissionService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataPermission(enable = false)
|
||||
@TenantIgnore
|
||||
public DataScopeEnum getUserDataPermissionLevel(Long userId) {
|
||||
List<RoleDO> roles = getEnableUserRoleListByUserIdFromCache(userId);
|
||||
if (CollUtil.isEmpty(roles)) {
|
||||
return DataScopeEnum.SELF;
|
||||
}
|
||||
|
||||
DataScopeEnum best = null;
|
||||
for (RoleDO role : roles) {
|
||||
DataScopeEnum scopeEnum = DataScopeEnum.findByScope(role.getDataScope());
|
||||
if (scopeEnum == null) {
|
||||
continue;
|
||||
}
|
||||
if (best == null || compareScope(scopeEnum, best) < 0) {
|
||||
best = scopeEnum;
|
||||
if (DataScopeEnum.ALL.equals(best)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return best != null ? best : DataScopeEnum.SELF;
|
||||
}
|
||||
|
||||
private int compareScope(DataScopeEnum left, DataScopeEnum right) {
|
||||
return getScopePriority(left) - getScopePriority(right);
|
||||
}
|
||||
|
||||
private int getScopePriority(DataScopeEnum scope) {
|
||||
int idx = DATA_SCOPE_PRIORITY.indexOf(scope);
|
||||
return idx >= 0 ? idx : Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得自身的代理对象,解决 AOP 生效问题
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user