优化权限初始化

This commit is contained in:
zhou-hao
2019-10-31 16:08:11 +08:00
parent 35133c824f
commit dfec08ceba

View File

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