mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-06-07 07:07:22 +08:00
优化权限初始化
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
authentication.setPermissions(permissionList);
|
||||
|
||||
//处理关联权限
|
||||
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(new ArrayList<>(allowed.values()));
|
||||
|
||||
return authentication;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user