优化获取是否管理员自动的方式,去除登出接口组织id依赖

This commit is contained in:
yangsb
2024-04-26 15:25:03 +08:00
parent 0fb3bca338
commit 522108aaa8
11 changed files with 48 additions and 7 deletions
@@ -94,10 +94,10 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
&& ObjectUtil.notEqual(accessToken.getUserType(), userType)) {
throw new AccessDeniedException("错误的用户类型");
}
CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(accessToken.getUserId(), "super_admin");
//CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(accessToken.getUserId(), "super_admin");
// 构建登录用户
return new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType())
.setOrganId(accessToken.getOrganId()).setScopes(accessToken.getScopes()).setIsSupAdmin(superAdmin.getCheckedData())
.setOrganId(accessToken.getOrganId()).setScopes(accessToken.getScopes()).setIsSupAdmin(accessToken.getIsSupAdmin())
.setLarge(accessToken.getLarge()).setDbNo(accessToken.getDbNo()).setTableNo(accessToken.getTableNo());
} catch (ServiceException serviceException) {
// 校验 Token 不通过时,考虑到一些接口是无需登录的,所以直接返回 null 即可
@@ -133,8 +133,8 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
String loginUserStr = request.getHeader(SecurityFrameworkUtils.LOGIN_USER_HEADER);
if(StrUtil.isNotEmpty(loginUserStr)) {
LoginUser loginUser = JsonUtils.parseObject(loginUserStr, LoginUser.class);
CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(loginUser.getId(), "super_admin");
loginUser.setIsSupAdmin(superAdmin.getCheckedData());
//CommonResult<Boolean> superAdmin = permissionApi.hasAnyRoles(loginUser.getId(), "super_admin");
//loginUser.setIsSupAdmin(superAdmin.getCheckedData());
loginUser.setNickname(URLDecoder.decode(loginUser.getNickname(),StandardCharsets.UTF_8));
return loginUser;
}
@@ -41,6 +41,16 @@ public interface SecurityFrameworkService {
*/
boolean hasAnyRoles(String... roles);
/**
* 判断是否有角色,任一一个即可
*
* @param userId 用户id
* @param roles 角色数组
* @return 是否
*/
boolean hasAnyRoles(Long userId, String... roles);
/**
* 判断是否有授权
*
@@ -76,6 +76,12 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
return hasAnyRolesCache.get(new KeyValue<>(SecurityFrameworkUtils.getLoginUserId(), Arrays.asList(roles)));
}
@Override
@SneakyThrows
public boolean hasAnyRoles(Long userId, String... roles) {
return hasAnyRolesCache.get(new KeyValue<>(userId, Arrays.asList(roles)));
}
@Override
public boolean hasScope(String scope) {
return hasAnyScopes(scope);