浏览代码

优化权限保存

zhou-hao 5 年之前
父节点
当前提交
3ea0da0b86

+ 17 - 18
jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/web/AuthorizationSettingDetailController.java

@@ -35,26 +35,25 @@ public class AuthorizationSettingDetailController {
     @PostMapping("/_save")
     @SaveAction
     public Mono<Boolean> saveSettings(@RequestBody Flux<AuthorizationSettingDetail> detailFlux) {
-
-        return settingService
-            .save(detailFlux
-                .flatMap(detail -> settingService.createDelete()
-                    .where(AuthorizationSettingEntity::getDimensionType, detail.getTargetType())
-                    .and(AuthorizationSettingEntity::getDimensionTarget, detail.getTargetId())
-                    .execute()
-                    .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())))
+        return detailFlux
+            //先删除旧的权限设置
+            .flatMap(detail -> settingService.getRepository().createDelete()
+                .where(AuthorizationSettingEntity::getDimensionType, detail.getTargetType())
+                .and(AuthorizationSettingEntity::getDimensionTarget, detail.getTargetId())
+                .execute()
+                .thenReturn(detail))
+            .flatMap(detail ->
+                Flux.fromIterable(providers)
+                    .flatMap(provider -> provider
+                        .getAllType()
+                        .filter(type -> type.getId().equals(detail.getTargetType()))
                         .singleOrEmpty()
-                        .flatMapIterable(detail::toEntity)
-                        .switchIfEmpty(Flux.defer(() -> Flux.fromIterable(detail.toEntity())))
-                )
+                        .flatMap(type -> provider.getDimensionById(type, detail.getTargetId())))
+                    .singleOrEmpty()
+                    .flatMapIterable(detail::toEntity)
+                    .switchIfEmpty(Flux.defer(() -> Flux.fromIterable(detail.toEntity())))
             )
+            .as(settingService::save)
             .thenReturn(true);
     }