1. 新增 permissionApi 查询当前用户权限级别的方法

This commit is contained in:
chenbowen
2025-12-18 20:26:27 +08:00
parent 633772f8b1
commit a86b98b0f5
6 changed files with 140 additions and 0 deletions

View File

@@ -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));

View File

@@ -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);
}

View File

@@ -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 生效问题
*