Browse Source

优化权限初始化

zhouhao 2 years ago
parent
commit
6aede9dafb

+ 4 - 0
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/simple/SimpleAuthentication.java

@@ -109,4 +109,8 @@ public class SimpleAuthentication implements Authentication {
     public void setDimensions(List<Dimension> dimensions) {
         this.dimensions.addAll(dimensions);
     }
+
+    public void addDimension(Dimension dimension) {
+        this.dimensions.add(dimension);
+    }
 }

+ 6 - 9
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/DefaultReactiveAuthenticationInitializeService.java

@@ -103,20 +103,17 @@ public class DefaultReactiveAuthenticationInitializeService
         return Flux.fromIterable(dimensionProviders)
                    .flatMap(provider -> provider.getDimensionByUserId(authentication.getUser().getId()))
                    .cast(Dimension.class)
+                   .doOnNext(authentication::addDimension)
                    .collectList()
-                   .doOnNext(authentication::setDimensions)
-                   .flatMap(allDimension ->
-                                    Mono.zip(
-                                            getAllPermission()
-                                            , getSettings(allDimension)
-                                                    .collect(Collectors.groupingBy(AuthorizationSettingEntity::getPermission))
-                                            , (_p, _s) -> handlePermission(authentication, allDimension, _p, _s)
-                                    ));
+                   .then(Mono.defer(() -> Mono
+                           .zip(getAllPermission(),
+                                getSettings(authentication.getDimensions()).collect(Collectors.groupingBy(AuthorizationSettingEntity::getPermission)),
+                                (_p, _s) -> handlePermission(authentication, _p, _s)
+                           )));
 
     }
 
     protected SimpleAuthentication handlePermission(SimpleAuthentication authentication,
-                                                    List<Dimension> dimensionList,
                                                     Map<String, PermissionEntity> permissions,
                                                     Map<String, List<AuthorizationSettingEntity>> settings) {
         Map<String, PermissionEntity> permissionMap = new HashMap<>();