Selaa lähdekoodia

优化关系获取

zhouhao 7 vuotta sitten
vanhempi
commit
cf2a802ead

+ 6 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/OrganizationalAuthorizationAutoConfiguration.java

@@ -1,5 +1,6 @@
 package org.hswebframework.web.organizational.authorization;
 
+import org.hswebframework.web.organizational.authorization.relation.RelationTargetSupplierAutoRegister;
 import org.hswebframework.web.organizational.authorization.simple.*;
 import org.hswebframework.web.organizational.authorization.simple.handler.*;
 import org.springframework.beans.BeansException;
@@ -79,6 +80,11 @@ public class OrganizationalAuthorizationAutoConfiguration implements BeanPostPro
         return bean;
     }
 
+    @Bean
+    public RelationTargetSupplierAutoRegister relationTargetSupplierAutoRegister() {
+        return new RelationTargetSupplierAutoRegister();
+    }
+
     @Configuration
     @ConditionalOnBean(PersonnelAuthorizationManager.class)
     public static class PersonnelAuthorizationSupplierAutoConfiguration {

+ 26 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/RelationTargetHolder.java

@@ -0,0 +1,26 @@
+package org.hswebframework.web.organizational.authorization.relation;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+public final class RelationTargetHolder {
+    private static List<RelationTargetSupplier> suppliers = new ArrayList<>(16);
+
+    @SuppressWarnings("unchecked")
+    public static <T extends Serializable> Optional<T> get(String type, String target) {
+        return (Optional<T>) suppliers.stream()
+                .filter(supplier -> supplier.support(type, target))
+                .map(supplier -> supplier.get(target))
+                .findFirst();
+    }
+
+    static void addSupplier(RelationTargetSupplier supplier) {
+        suppliers.add(supplier);
+    }
+}

+ 14 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/RelationTargetSupplier.java

@@ -0,0 +1,14 @@
+package org.hswebframework.web.organizational.authorization.relation;
+
+import java.io.Serializable;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+public interface RelationTargetSupplier {
+
+    boolean support(String targetType, String target);
+
+    Serializable get(String target);
+}

+ 23 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/RelationTargetSupplierAutoRegister.java

@@ -0,0 +1,23 @@
+package org.hswebframework.web.organizational.authorization.relation;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+
+/**
+ * @author zhouhao
+ * @since 3.0
+ */
+public class RelationTargetSupplierAutoRegister implements BeanPostProcessor {
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+        return bean;
+    }
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+        if (bean instanceof RelationTargetSupplier) {
+            RelationTargetHolder.addSupplier(((RelationTargetSupplier) bean));
+        }
+        return bean;
+    }
+}

+ 4 - 55
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/SimpleRelation.java

@@ -1,13 +1,16 @@
 package org.hswebframework.web.organizational.authorization.relation;
 
+import lombok.Data;
+
 import java.io.Serializable;
 
 /**
- *
  * @author zhouhao
  */
+@Data
 public class SimpleRelation implements Relation {
     private static final long serialVersionUID = 1_0;
+
     private String type;
 
     private String relation;
@@ -19,58 +22,4 @@ public class SimpleRelation implements Relation {
     private String name;
 
     private Direction direction;
-
-    @Override
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    @Override
-    public String getRelation() {
-        return relation;
-    }
-
-    public void setRelation(String relation) {
-        this.relation = relation;
-    }
-
-    @Override
-    public String getTarget() {
-        return target;
-    }
-
-    public void setTarget(String target) {
-        this.target = target;
-    }
-
-    @Override
-    public Serializable getTargetObject() {
-        return targetObject;
-    }
-
-    public void setTargetObject(Serializable targetObject) {
-        this.targetObject = targetObject;
-    }
-
-    @Override
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public Direction getDirection() {
-        return direction;
-    }
-
-    public void setDirection(Direction direction) {
-        this.direction = direction;
-    }
 }

+ 4 - 6
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java

@@ -2,10 +2,7 @@ package org.hswebframework.web.service.organizational.simple;
 
 import org.hswebframework.web.dao.organizational.RelationInfoDao;
 import org.hswebframework.web.entity.organizational.RelationInfoEntity;
-import org.hswebframework.web.organizational.authorization.relation.Relation;
-import org.hswebframework.web.organizational.authorization.relation.Relations;
-import org.hswebframework.web.organizational.authorization.relation.SimpleRelation;
-import org.hswebframework.web.organizational.authorization.relation.SimpleRelations;
+import org.hswebframework.web.organizational.authorization.relation.*;
 import org.hswebframework.web.service.DefaultDSLQueryService;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.id.IDGenerator;
@@ -25,6 +22,7 @@ import java.util.stream.Collectors;
 @Service("relationInfoService")
 public class SimpleRelationInfoService extends GenericEntityService<RelationInfoEntity, String>
         implements RelationInfoService {
+
     @Autowired
     private RelationInfoDao relationInfoDao;
 
@@ -57,8 +55,8 @@ public class SimpleRelationInfoService extends GenericEntityService<RelationInfo
                     SimpleRelation relation = new SimpleRelation();
                     relation.setType(info.getRelationTypeFrom());
                     relation.setTarget(info.getRelationTo());
-                    //TODO 获取关系目标实体
-                    relation.setTargetObject(null);
+                    relation.setTargetObject(RelationTargetHolder
+                            .get(info.getRelationTypeTo(), info.getRelationTo()).orElse(null));
                     relation.setRelation(info.getRelationId());
                     if (target.equals(info.getRelationFrom())) {
                         relation.setDirection(Relation.Direction.POSITIVE);