Forráskód Böngészése

增加in-dimension查询条件

zhou-hao 5 éve
szülő
commit
9da29b179d

+ 9 - 3
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/configuration/AuthorizationServiceAutoConfiguration.java

@@ -7,6 +7,7 @@ import org.hswebframework.web.authorization.simple.DefaultAuthorizationAutoConfi
 import org.hswebframework.web.system.authorization.api.UserDimensionProvider;
 import org.hswebframework.web.system.authorization.api.service.reactive.ReactiveUserService;
 import org.hswebframework.web.system.authorization.defaults.service.*;
+import org.hswebframework.web.system.authorization.defaults.service.terms.UserDimensionTerm;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -54,20 +55,25 @@ public class AuthorizationServiceAutoConfiguration {
         }
 
         @Bean
-        public DefaultDimensionUserService defaultDimensionUserService(){
+        public DefaultDimensionUserService defaultDimensionUserService() {
             return new DefaultDimensionUserService();
         }
 
         @Bean
-        public DefaultAuthorizationSettingService defaultAuthorizationSettingService(){
+        public DefaultAuthorizationSettingService defaultAuthorizationSettingService() {
             return new DefaultAuthorizationSettingService();
         }
 
         @Bean
-        public DefaultPermissionService defaultPermissionService(){
+        public DefaultPermissionService defaultPermissionService() {
             return new DefaultPermissionService();
         }
+
     }
 
+    @Bean
+    public UserDimensionTerm userDimensionTerm() {
+        return new UserDimensionTerm();
+    }
 
 }

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

@@ -69,7 +69,8 @@ public class DefaultReactiveAuthenticationInitializeService
 
     protected Flux<AuthorizationSettingEntity> getSettings(List<Dimension> dimensions) {
         return Flux.fromIterable(dimensions)
-                .groupBy(d -> d.getType() == null ? "unknown" : d.getType().getId(), (Function<Dimension, Object>) Dimension::getId)
+                .filter(dimension -> dimension.getType() != null)
+                .groupBy(d -> d.getType().getId(), (Function<Dimension, Object>) Dimension::getId)
                 .flatMap(group ->
                         group.collectList()
                                 .flatMapMany(list -> settingRepository

+ 35 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/terms/UserDimensionTerm.java

@@ -0,0 +1,35 @@
+package org.hswebframework.web.system.authorization.defaults.service.terms;
+
+import org.hswebframework.ezorm.core.param.Term;
+import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.EmptySqlFragments;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.PrepareSqlFragments;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments;
+import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.AbstractTermFragmentBuilder;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class UserDimensionTerm extends AbstractTermFragmentBuilder {
+    public UserDimensionTerm() {
+        super("in-dimension", "在维度中的用户");
+    }
+
+    @Override
+    public SqlFragments createFragments(String columnFullName, RDBColumnMetadata column, Term term) {
+
+        List<Object> values = convertList(column, term);
+        if (values.isEmpty()) {
+            return EmptySqlFragments.INSTANCE;
+        }
+
+        PrepareSqlFragments fragments = PrepareSqlFragments.of();
+
+        fragments.addSql("exists(select 1 from s_dimension_user d where d.user_id =", columnFullName, "and d.dimension_id in(",
+                values.stream().map(r -> "?").collect(Collectors.joining(",")), "))")
+                .addParameter(values);
+
+
+        return fragments;
+    }
+}