|
@@ -1,8 +1,11 @@
|
|
package org.jetlinks.community.auth.service;
|
|
package org.jetlinks.community.auth.service;
|
|
|
|
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
+import org.hswebframework.web.authorization.Authentication;
|
|
import org.hswebframework.web.authorization.DimensionProvider;
|
|
import org.hswebframework.web.authorization.DimensionProvider;
|
|
import org.hswebframework.web.system.authorization.api.entity.AuthorizationSettingEntity;
|
|
import org.hswebframework.web.system.authorization.api.entity.AuthorizationSettingEntity;
|
|
|
|
+import org.hswebframework.web.system.authorization.defaults.configuration.PermissionProperties;
|
|
import org.hswebframework.web.system.authorization.defaults.service.DefaultAuthorizationSettingService;
|
|
import org.hswebframework.web.system.authorization.defaults.service.DefaultAuthorizationSettingService;
|
|
import org.jetlinks.community.auth.web.request.AuthorizationSettingDetail;
|
|
import org.jetlinks.community.auth.web.request.AuthorizationSettingDetail;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
@@ -18,27 +21,32 @@ public class AuthorizationSettingDetailService {
|
|
|
|
|
|
private final DefaultAuthorizationSettingService settingService;
|
|
private final DefaultAuthorizationSettingService settingService;
|
|
private final List<DimensionProvider> providers;
|
|
private final List<DimensionProvider> providers;
|
|
|
|
+ private final PermissionProperties permissionProperties;
|
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
- public Mono<Void> saveDetail(Flux<AuthorizationSettingDetail> detailFlux) {
|
|
|
|
|
|
+ public Mono<Void> saveDetail(Authentication authentication, Flux<AuthorizationSettingDetail> detailFlux) {
|
|
return detailFlux
|
|
return detailFlux
|
|
//先删除旧的权限设置
|
|
//先删除旧的权限设置
|
|
- .flatMap(detail -> settingService.getRepository().createDelete()
|
|
|
|
|
|
+ .flatMap(detail -> settingService
|
|
|
|
+ .getRepository()
|
|
|
|
+ .createDelete()
|
|
.where(AuthorizationSettingEntity::getDimensionType, detail.getTargetType())
|
|
.where(AuthorizationSettingEntity::getDimensionType, detail.getTargetType())
|
|
.and(AuthorizationSettingEntity::getDimensionTarget, detail.getTargetId())
|
|
.and(AuthorizationSettingEntity::getDimensionTarget, detail.getTargetId())
|
|
.execute()
|
|
.execute()
|
|
.thenReturn(detail))
|
|
.thenReturn(detail))
|
|
- .flatMap(detail ->
|
|
|
|
- Flux.fromIterable(providers)
|
|
|
|
- .flatMap(provider -> provider
|
|
|
|
- .getAllType()
|
|
|
|
- .filter(type -> type.getId().equals(detail.getTargetType()))
|
|
|
|
- .singleOrEmpty()
|
|
|
|
- .flatMap(type -> provider.getDimensionById(type, detail.getTargetId()))
|
|
|
|
- .flatMapIterable(detail::toEntity))
|
|
|
|
- .switchIfEmpty(Flux.defer(() -> Flux.fromIterable(detail.toEntity())))
|
|
|
|
- .distinct(AuthorizationSettingEntity::getPermission)
|
|
|
|
|
|
+ .flatMap(detail -> Flux
|
|
|
|
+ .fromIterable(providers)
|
|
|
|
+ .flatMap(provider -> provider
|
|
|
|
+ .getAllType()
|
|
|
|
+ .filter(type -> type.getId().equals(detail.getTargetType()))//过滤掉不同的维度类型
|
|
|
|
+ .singleOrEmpty()
|
|
|
|
+ .flatMap(type -> provider.getDimensionById(type, detail.getTargetId()))
|
|
|
|
+ .flatMapIterable(detail::toEntity))
|
|
|
|
+ .switchIfEmpty(Flux.defer(() -> Flux.fromIterable(detail.toEntity())))
|
|
|
|
+ .distinct(AuthorizationSettingEntity::getPermission)
|
|
)
|
|
)
|
|
|
|
+ .map(entity -> permissionProperties.getFilter().handleSetting(authentication, entity))
|
|
|
|
+ .filter(e -> CollectionUtils.isNotEmpty(e.getActions()))
|
|
.as(settingService::save)
|
|
.as(settingService::save)
|
|
.then();
|
|
.then();
|
|
}
|
|
}
|