|
@@ -15,10 +15,12 @@ import org.hswebframework.web.authorization.simple.SimpleUser;
|
|
|
import org.hswebframework.web.authorization.simple.builder.SimpleDataAccessConfigBuilderFactory;
|
|
|
import org.hswebframework.web.authorization.DimensionProvider;
|
|
|
import org.hswebframework.web.system.authorization.api.entity.AuthorizationSettingEntity;
|
|
|
+import org.hswebframework.web.system.authorization.api.entity.ParentPermission;
|
|
|
import org.hswebframework.web.system.authorization.api.entity.PermissionEntity;
|
|
|
import org.hswebframework.web.system.authorization.api.entity.UserEntity;
|
|
|
import org.hswebframework.web.system.authorization.api.service.reactive.ReactiveUserService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
import reactor.core.publisher.Flux;
|
|
|
import reactor.core.publisher.Mono;
|
|
|
|
|
@@ -96,17 +98,19 @@ public class DefaultReactiveAuthenticationInitializeService
|
|
|
List<Dimension> dimensionList,
|
|
|
Map<String, PermissionEntity> permissions,
|
|
|
Map<String, List<AuthorizationSettingEntity>> settings) {
|
|
|
- List<Permission> permissionList = new ArrayList<>();
|
|
|
+ Map<String, PermissionEntity> permissionMap = new HashMap<>();
|
|
|
+ Map<String, SimplePermission> allowed = new HashMap<>();
|
|
|
|
|
|
- for (PermissionEntity value : permissions.values()) {
|
|
|
- List<AuthorizationSettingEntity> permissionSettings = settings.get(value.getId());
|
|
|
+ for (PermissionEntity permissionEntity : permissions.values()) {
|
|
|
+ permissionMap.put(permissionEntity.getId(), permissionEntity);
|
|
|
+ List<AuthorizationSettingEntity> permissionSettings = settings.get(permissionEntity.getId());
|
|
|
if (CollectionUtils.isEmpty(permissionSettings)) {
|
|
|
continue;
|
|
|
}
|
|
|
permissionSettings.sort(Comparator.comparingInt(e -> e.getPriority() == null ? 0 : e.getPriority()));
|
|
|
SimplePermission permission = new SimplePermission();
|
|
|
- permission.setId(value.getId());
|
|
|
- permission.setName(value.getName());
|
|
|
+ permission.setId(permissionEntity.getId());
|
|
|
+ permission.setName(permissionEntity.getName());
|
|
|
Map<DataAccessType, DataAccessConfig> configs = new HashMap<>();
|
|
|
|
|
|
for (AuthorizationSettingEntity permissionSetting : permissionSettings) {
|
|
@@ -123,15 +127,48 @@ public class DefaultReactiveAuthenticationInitializeService
|
|
|
.map(conf -> builderFactory.create().fromMap(conf.getConfig()).build())
|
|
|
.forEach(access -> configs.put(access.getType(), access));
|
|
|
}
|
|
|
-
|
|
|
- permission.getActions().addAll(permissionSetting.getActions());
|
|
|
+ if (CollectionUtils.isNotEmpty(permissionSetting.getActions())) {
|
|
|
+ permission.getActions().addAll(permissionSetting.getActions());
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
+ allowed.put(permissionEntity.getId(), permission);
|
|
|
permission.setDataAccesses(new HashSet<>(configs.values()));
|
|
|
- permissionList.add(permission);
|
|
|
+ }
|
|
|
|
|
|
+ //处理关联权限
|
|
|
+ for (PermissionEntity permissionEntity : permissions.values()) {
|
|
|
+ SimplePermission allow = allowed.get(permissionEntity.getId());
|
|
|
+ if (allow == null || CollectionUtils.isEmpty(permissionEntity.getParents())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (ParentPermission parent : permissionEntity.getParents()) {
|
|
|
+ if (StringUtils.isEmpty(parent.getPermission())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Set<String> pre = parent.getPreActions();
|
|
|
+ //满足前置条件
|
|
|
+ if (CollectionUtils.isEmpty(pre) || allow.getActions().containsAll(pre)) {
|
|
|
+ PermissionEntity mergePermission = permissionMap.get(parent.getPermission());
|
|
|
+ if (mergePermission == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ SimplePermission merge = allowed.get(parent.getPermission());
|
|
|
+ if (merge == null) {
|
|
|
+ merge = new SimplePermission();
|
|
|
+ merge.setName(mergePermission.getName());
|
|
|
+ merge.setId(mergePermission.getId());
|
|
|
+ allowed.put(merge.getId(), merge);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(parent.getActions())) {
|
|
|
+ merge.getActions().addAll(parent.getActions());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- authentication.setPermissions(permissionList);
|
|
|
+
|
|
|
+
|
|
|
+ authentication.setPermissions(new ArrayList<>(allowed.values()));
|
|
|
|
|
|
return authentication;
|
|
|
}
|