relations.findPos("leader"))
+ .orElse(null));
}
@GetMapping("/test2")
diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthorization.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthorization.java
index ce969b53a..a5329c085 100644
--- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthorization.java
+++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthorization.java
@@ -35,7 +35,29 @@ public interface PersonnelAuthorization extends Serializable {
Personnel getPersonnel();
/**
+ * 获取人员的关系信息
+ *
+ * boolean isLeader = PersonnelAuthorization
+ * .current().get()
+ * .getRelations()
+ * // 和张三的人员为leader关系, 我是张三的leader
+ * .has("leader","人员","张三");
+ * //我是开发部的leader
+ * //.has("leader","部门","开发部");
+ * //反转关系: 张三是我的leader
+ * //.has("leader","人员","张三","PRE");
+ *
+ *
+ * List relations= PersonnelAuthorization.current()
+ * //查找用户关系
+ * .map(PersonnelAuthorization::getRelations)
+ * .map(relations -> relations.findAll("leader"))
+ * .orElse(null)
+ *
+ *
* @return 人员关系信息
+ * @see Relations
+ * @see org.hswebframework.web.organizational.authorization.relation.Relation
*/
Relations getRelations();
diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relations.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relations.java
index c36f738a2..5075f23c3 100644
--- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relations.java
+++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relations.java
@@ -35,13 +35,27 @@ public interface Relations extends Serializable {
* @return 是否存在关系
*/
default boolean has(String relation, String type, String to, Relation.Direction direction) {
- return getAllRelations().stream().anyMatch(rel ->
+ return getAll().stream().anyMatch(rel ->
rel.getRelation().equals(relation)
&& rel.getType().equals(type)
&& rel.getTarget().equals(to)
&& rel.matchDirection(direction));
}
+ default boolean has(String relation, String type, Relation.Direction direction) {
+ return getAll().stream().anyMatch(rel ->
+ rel.getRelation().equals(relation)
+ && rel.getType().equals(type)
+ && rel.matchDirection(direction));
+ }
+
+
+ default boolean has(String relation, Relation.Direction direction) {
+ return getAll().stream().anyMatch(rel ->
+ rel.getRelation().equals(relation)
+ && rel.matchDirection(direction));
+ }
+
/**
* @see this#has(String, String, String, Relation.Direction)
*/
@@ -54,19 +68,63 @@ public interface Relations extends Serializable {
*
* @see this#has(String, String, String, Relation.Direction)
*/
- default boolean has(String relation, String type, String to) {
+ default boolean has(String relation) {
+ return !findAll(relation).isEmpty();
+ }
+
+ default boolean hasRev(String relation, String type, String to) {
+ return has(relation, type, to, Relation.Direction.REVERSE);
+ }
+
+ default boolean hasPos(String relation, String type, String to) {
return has(relation, type, to, Relation.Direction.POSITIVE);
}
+ default boolean hasRev(String relation, String type) {
+ return has(relation, type, Relation.Direction.REVERSE);
+ }
+
+ default boolean hasPos(String relation, String type) {
+ return has(relation, type, Relation.Direction.POSITIVE);
+ }
+
+ default boolean hasPos(String relation) {
+ return has(relation, Relation.Direction.POSITIVE);
+ }
+
+ default boolean hasRev(String relation) {
+ return has(relation, Relation.Direction.REVERSE);
+ }
+
/**
* 获取指定关系的全部关系信息
*
- * @param relation 关系标识
+ * @param relation 关系标识,如: leader
* @return 关系信息集合,如果关系不存在,返回空集合
- * @see this#findRelations(Predicate)
+ * @see this#find(Predicate)
*/
- default List getRelations(String relation) {
- return findRelations(rel -> rel.getRelation().equals(relation));
+ default List findAll(String relation) {
+ return find(rel -> rel.getRelation().equals(relation));
+ }
+
+ /**
+ * 获取正向关系,如: 我是xxx的relation
+ *
+ * @param relation 关系标识,如: leader
+ * @return 关系信息集合,如果关系不存在,返回空集合
+ */
+ default List findRev(String relation) {
+ return find(relation, Relation.Direction.REVERSE);
+ }
+
+ /**
+ * 获取反向关系,如: xxx是我的relation
+ *
+ * @param relation 关系标识,如: leader
+ * @return 关系信息集合,如果关系不存在,返回空集合
+ */
+ default List findPos(String relation) {
+ return find(relation, Relation.Direction.REVERSE);
}
/**
@@ -76,8 +134,8 @@ public interface Relations extends Serializable {
* @param direction 关系方向
* @return 关系信息集合,如果关系不存在,返回空集合
*/
- default List getRelations(String relation, Relation.Direction direction) {
- return findRelations(rel -> rel.getRelation().equals(relation) && rel.matchDirection(direction));
+ default List find(String relation, Relation.Direction direction) {
+ return find(rel -> rel.getRelation().equals(relation) && rel.matchDirection(direction));
}
/**
@@ -86,10 +144,34 @@ public interface Relations extends Serializable {
* @param relation 关系标识,例如: leader
* @param type 关系类型,例如:person
* @return 关系信息集合,如果关系不存在,返回空集合
- * @see this#findRelations(Predicate)
+ * @see this#find(Predicate)
*/
- default List getRelations(String relation, String type) {
- return findRelations(rel -> rel.getRelation().equals(relation) && rel.getType().equals(type));
+ default List findAll(String relation, String type) {
+ return find(rel -> rel.getRelation().equals(relation) && rel.getType().equals(type));
+ }
+
+ /**
+ * 获取指定关系和类型以及方向反向关系
+ *
+ * @param relation 关系标识,例如: leader
+ * @param type 关系类型,例如:person
+ * @return 关系信息集合,如果关系不存在,返回空集合
+ * @see this#find(String, String, Relation.Direction)
+ */
+ default List findRev(String relation, String type) {
+ return find(relation, type, Relation.Direction.REVERSE);
+ }
+
+ /**
+ * 获取指定关系和类型以及方向正向关系
+ *
+ * @param relation 关系标识,例如: leader
+ * @param type 关系类型,例如:person
+ * @return 关系信息集合,如果关系不存在,返回空集合
+ * @see this#find(String, String, Relation.Direction)
+ */
+ default List findPos(String relation, String type) {
+ return find(relation, type, Relation.Direction.POSITIVE);
}
/**
@@ -99,38 +181,37 @@ public interface Relations extends Serializable {
* @param type 关系类型,例如:person
* @param direction 关系方向
* @return 关系信息集合,如果关系不存在,返回空集合
- * @see this#findRelations(Predicate)
+ * @see this#find(Predicate)
*/
- default List getRelations(String relation, String type, Relation.Direction direction) {
- return findRelations(rel ->
+ default List find(String relation, String type, Relation.Direction direction) {
+ return find(rel ->
rel.getRelation().equals(relation)
&& rel.getType().equals(type)
&& rel.matchDirection(direction));
}
/**
- * @see this#getRelations(String, String, Relation.Direction)
+ * @see this#find(String, String, Relation.Direction)
*/
- default List getRelations(String relation, String type,String direction) {
- return getRelations(relation,type, Relation.Direction.fromString(direction));
+ default List find(String relation, String type, String direction) {
+ return find(relation, type, Relation.Direction.fromString(direction));
}
/**
* 查找关系
*
- * findRelations(rel->rel.getType().equals("person"))
+ * findAll(rel->rel.getType().equals("person"))
*
*
* @param predicate 查找的判断逻辑
* @return 满足条件的关系信息集合,如果全部不满足则返回空集合
*/
- default List findRelations(Predicate predicate) {
- return getAllRelations().stream().filter(predicate).collect(Collectors.toList());
+ default List find(Predicate predicate) {
+ return getAll().stream().filter(predicate).collect(Collectors.toList());
}
/**
- *
* @return 全部关系信息,如果一个也没有返回空集合
*/
- List getAllRelations();
+ List getAll();
}
diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/SimpleRelations.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/SimpleRelations.java
index a200f5f38..8d6f3df0e 100644
--- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/SimpleRelations.java
+++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/SimpleRelations.java
@@ -8,23 +8,23 @@ import java.util.Objects;
* @author zhouhao
*/
public class SimpleRelations implements Relations {
- private List relations;
+ private List all;
@Override
- public List getAllRelations() {
- if (null == relations) relations = new ArrayList<>();
- return relations;
+ public List getAll() {
+ if (null == all) all = new ArrayList<>();
+ return all;
}
- public void setRelations(List relations) {
- Objects.requireNonNull(relations);
- this.relations = relations;
+ public void setAll(List all) {
+ Objects.requireNonNull(all);
+ this.all = all;
}
public SimpleRelations() {
}
- public SimpleRelations(List relations) {
- this.relations = relations;
+ public SimpleRelations(List all) {
+ this.all = all;
}
}
diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-dao/hsweb-system-organizational-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/organizational/RelationInfoMapper.xml b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-dao/hsweb-system-organizational-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/organizational/RelationInfoMapper.xml
index a09af3c7d..98cb0b9de 100644
--- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-dao/hsweb-system-organizational-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/organizational/RelationInfoMapper.xml
+++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-dao/hsweb-system-organizational-dao-mybatis/src/main/resources/org/hswebframework/web/dao/mybatis/mappers/organizational/RelationInfoMapper.xml
@@ -3,14 +3,14 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -18,8 +18,8 @@
-
-
+
+
diff --git a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java
index c2dabb320..4ed419545 100644
--- a/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java
+++ b/hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java
@@ -31,6 +31,7 @@ import org.hswebframework.web.organizational.authorization.TreeNode;
import org.hswebframework.web.organizational.authorization.relation.Relation;
import org.hswebframework.web.organizational.authorization.relation.SimpleRelation;
import org.hswebframework.web.organizational.authorization.relation.SimpleRelations;
+import org.hswebframework.web.organizational.authorization.simple.SimplePersonnel;
import org.hswebframework.web.organizational.authorization.simple.SimplePersonnelAuthorization;
import org.hswebframework.web.service.DefaultDSLQueryService;
import org.hswebframework.web.service.EnableCacheGenericEntityService;
@@ -225,7 +226,7 @@ public class SimplePersonService extends EnableCacheGenericEntityService
- //relation.setName(info.getRelationId());
+ relation.setRelation(info.getRelationId());
if (personId.equals(info.getRelationFrom())) {
relation.setDirection(Relation.Direction.POSITIVE);
} else {