Browse Source

优化权限维度

zhou-hao 5 years ago
parent
commit
61d4fe9899

+ 3 - 0
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/DimensionProvider.java

@@ -1,6 +1,7 @@
 package org.hswebframework.web.authorization;
 
 import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
 
 public interface DimensionProvider {
 
@@ -8,6 +9,8 @@ public interface DimensionProvider {
 
     Flux<? extends Dimension> getDimensionByUserId(String userId);
 
+    Mono<? extends Dimension> getDimensionById(DimensionType type, String id);
+
     Flux<String> getUserIdByDimensionId(String dimensionId);
 
 }

+ 4 - 1
hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/web/ResponseMessageWrapper.java

@@ -17,7 +17,10 @@ import reactor.core.publisher.Mono;
 import java.util.List;
 
 public class ResponseMessageWrapper extends ResponseBodyResultHandler {
-    public ResponseMessageWrapper(List<HttpMessageWriter<?>> writers, RequestedContentTypeResolver resolver, ReactiveAdapterRegistry registry) {
+
+    public ResponseMessageWrapper(List<HttpMessageWriter<?>> writers,
+                                  RequestedContentTypeResolver resolver,
+                                  ReactiveAdapterRegistry registry) {
         super(writers, resolver, registry);
         setOrder(90);
     }

+ 2 - 1
hsweb-starter/src/main/java/org/hswebframework/web/starter/jackson/CustomJackson2JsonDecoder.java

@@ -43,7 +43,8 @@ public class CustomJackson2JsonDecoder extends Jackson2CodecSupport implements H
 
     @Override
     public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
-        JavaType javaType = getObjectMapper().getTypeFactory().constructType(elementType.getType());
+        Type type = elementType.resolve() == null ? elementType.getType() : elementType.resolve();
+        JavaType javaType = getObjectMapper().getTypeFactory().constructType(type);
         // Skip String: CharSequenceDecoder + "*/*" comes after
         return (!CharSequence.class.isAssignableFrom(elementType.toClass()) &&
                 getObjectMapper().canDeserialize(javaType) && supportsMimeType(mimeType));

+ 7 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/UserDimensionProvider.java

@@ -5,6 +5,7 @@ import org.hswebframework.web.authorization.Dimension;
 import org.hswebframework.web.authorization.DimensionProvider;
 import org.hswebframework.web.authorization.DimensionType;
 import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
 
 public class UserDimensionProvider implements DimensionProvider {
 
@@ -19,6 +20,12 @@ public class UserDimensionProvider implements DimensionProvider {
                 .map(id -> Dimension.of(userId, userId, DefaultDimensionType.user));
     }
 
+    @Override
+    public Mono<? extends Dimension> getDimensionById(DimensionType type, String id) {
+        return Mono.just(id)
+                .map(userId -> Dimension.of(userId, userId, DefaultDimensionType.user));
+    }
+
     @Override
     public Flux<String> getUserIdByDimensionId(String dimensionId) {
         return Flux.just(dimensionId);

+ 1 - 1
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-api/src/main/java/org/hswebframework/web/system/authorization/api/entity/AuthorizationSettingEntity.java

@@ -47,7 +47,7 @@ public class AuthorizationSettingEntity implements Entity {
     @NotBlank(message = "维度目标不能为空",groups = CreateGroup.class)
     private String dimensionTarget;
 
-    @Column(name = "dimension_target_name", length = 64, updatable = false)
+    @Column(name = "dimension_target_name", length = 64)
     @Comment("维度目标名称")//维度实例名称.如: 用户名. 角色名
     private String dimensionTargetName;
 

+ 11 - 0
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/DefaultDimensionService.java

@@ -5,6 +5,7 @@ import org.hswebframework.ezorm.rdb.mapping.ReactiveDelete;
 import org.hswebframework.ezorm.rdb.mapping.ReactiveRepository;
 import org.hswebframework.ezorm.rdb.mapping.ReactiveUpdate;
 import org.hswebframework.ezorm.rdb.mapping.defaults.SaveResult;
+import org.hswebframework.web.authorization.Dimension;
 import org.hswebframework.web.authorization.DimensionProvider;
 import org.hswebframework.web.authorization.DimensionType;
 import org.hswebframework.web.crud.service.GenericReactiveCrudService;
@@ -61,6 +62,16 @@ public class DefaultDimensionService
                 .fetch();
     }
 
+    @Override
+    public Mono<DynamicDimension> getDimensionById(DimensionType type, String id) {
+
+        return createQuery()
+                .where(DimensionEntity::getId,id)
+                .fetch()
+                .singleOrEmpty()
+                .map(entity-> DynamicDimension.of(entity, type));
+    }
+
     @Override
     public Flux<DynamicDimension> getDimensionByUserId(String userId) {
         return getAllType()