|
@@ -155,10 +155,11 @@ public class DefaultAuthorizingHandler implements AuthorizingHandler {
|
|
Set<String> actionsDef = definition.getActions();
|
|
Set<String> actionsDef = definition.getActions();
|
|
Set<String> rolesDef = definition.getRoles();
|
|
Set<String> rolesDef = definition.getRoles();
|
|
Set<String> usersDef = definition.getUser();
|
|
Set<String> usersDef = definition.getUser();
|
|
-
|
|
|
|
|
|
+ boolean anyHandled = false;
|
|
|
|
|
|
// 控制权限
|
|
// 控制权限
|
|
- if (!definition.getPermissions().isEmpty()) {
|
|
|
|
|
|
+ if (!permissionsDef.isEmpty()) {
|
|
|
|
+ anyHandled = true;
|
|
if (logger.isInfoEnabled()) {
|
|
if (logger.isInfoEnabled()) {
|
|
logger.info("执行权限控制:权限{},操作{}.",
|
|
logger.info("执行权限控制:权限{},操作{}.",
|
|
permissionsDef,
|
|
permissionsDef,
|
|
@@ -191,23 +192,27 @@ public class DefaultAuthorizingHandler implements AuthorizingHandler {
|
|
CollectionUtils.isNotEmpty(permissions) :
|
|
CollectionUtils.isNotEmpty(permissions) :
|
|
//权限数量和配置的数量相同
|
|
//权限数量和配置的数量相同
|
|
permissions.size() == permissionsDef.size();
|
|
permissions.size() == permissionsDef.size();
|
|
- } else {
|
|
|
|
- access = false;
|
|
|
|
}
|
|
}
|
|
//控制角色
|
|
//控制角色
|
|
if (!rolesDef.isEmpty()) {
|
|
if (!rolesDef.isEmpty()) {
|
|
|
|
+
|
|
Set<String> roleIds = authentication.getRoles().stream().map(Role::getId).collect(Collectors.toSet());
|
|
Set<String> roleIds = authentication.getRoles().stream().map(Role::getId).collect(Collectors.toSet());
|
|
|
|
|
|
Function<Predicate<String>, Boolean> func = logicalIsOr
|
|
Function<Predicate<String>, Boolean> func = logicalIsOr
|
|
? roleIds.stream()::anyMatch
|
|
? roleIds.stream()::anyMatch
|
|
: roleIds.stream()::allMatch;
|
|
: roleIds.stream()::allMatch;
|
|
|
|
+ if (anyHandled) {
|
|
|
|
+ access = logicalIsOr
|
|
|
|
+ ? access || func.apply(rolesDef::contains)
|
|
|
|
+ : access && func.apply(rolesDef::contains);
|
|
|
|
+ } else {
|
|
|
|
+ access = func.apply(rolesDef::contains);
|
|
|
|
+ }
|
|
|
|
|
|
- access = logicalIsOr
|
|
|
|
- ? access || func.apply(rolesDef::contains)
|
|
|
|
- : access && func.apply(rolesDef::contains);
|
|
|
|
if (logger.isInfoEnabled()) {
|
|
if (logger.isInfoEnabled()) {
|
|
logger.info("执行角色权限控制{},当前角色:{},限制角色:{}.", access ? "通过" : "拒绝", roleIds, rolesDef);
|
|
logger.info("执行角色权限控制{},当前角色:{},限制角色:{}.", access ? "通过" : "拒绝", roleIds, rolesDef);
|
|
}
|
|
}
|
|
|
|
+ anyHandled = true;
|
|
}
|
|
}
|
|
//控制用户
|
|
//控制用户
|
|
if (!usersDef.isEmpty()) {
|
|
if (!usersDef.isEmpty()) {
|
|
@@ -215,15 +220,19 @@ public class DefaultAuthorizingHandler implements AuthorizingHandler {
|
|
Function<Predicate<String>, Boolean> func = logicalIsOr
|
|
Function<Predicate<String>, Boolean> func = logicalIsOr
|
|
? usersDef.stream()::anyMatch
|
|
? usersDef.stream()::anyMatch
|
|
: usersDef.stream()::allMatch;
|
|
: usersDef.stream()::allMatch;
|
|
- access = logicalIsOr
|
|
|
|
- ? access || func.apply(username::equals)
|
|
|
|
- : access && func.apply(username::equals);
|
|
|
|
|
|
+ if (anyHandled) {
|
|
|
|
+ access = logicalIsOr
|
|
|
|
+ ? access || func.apply(username::equals)
|
|
|
|
+ : access && func.apply(username::equals);
|
|
|
|
+ } else {
|
|
|
|
+ access = func.apply(username::equals);
|
|
|
|
+ }
|
|
if (logger.isInfoEnabled()) {
|
|
if (logger.isInfoEnabled()) {
|
|
logger.info("执行用户权限控制{},当前用户:{},限制用户:{}.", access ? "通过" : "拒绝", username, usersDef);
|
|
logger.info("执行用户权限控制{},当前用户:{},限制用户:{}.", access ? "通过" : "拒绝", username, usersDef);
|
|
}
|
|
}
|
|
- if (!access) {
|
|
|
|
- throw new AccessDenyException(definition.getMessage());
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+ if (!access) {
|
|
|
|
+ throw new AccessDenyException(definition.getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|