Commit ecaee512 authored by 雍欢's avatar 雍欢

MySQL 下能够使用数据管理权限

parent d8f29bf5
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-common</artifactId> <artifactId>huigou-common</artifactId>
<name>huigou-common</name> <name>huigou-common</name>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-core-api</artifactId> <artifactId>huigou-core-api</artifactId>
<name>huigou-core-api</name> <name>huigou-core-api</name>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-core-impl</artifactId> <artifactId>huigou-core-impl</artifactId>
<name>huigou-core-impl</name> <name>huigou-core-impl</name>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-core-proxy</artifactId> <artifactId>huigou-core-proxy</artifactId>
<name>huigou-core-proxy</name> <name>huigou-core-proxy</name>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-data</artifactId> <artifactId>huigou-data</artifactId>
<name>huigou-data</name> <name>huigou-data</name>
......
package com.huigou.data.query; package com.huigou.data.query;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import com.huigou.cache.service.ICache; import com.huigou.cache.service.ICache;
import com.huigou.context.Operator; import com.huigou.context.Operator;
import com.huigou.context.OrgUnit; import com.huigou.context.OrgUnit;
import com.huigou.context.ThreadLocalUtil; import com.huigou.context.ThreadLocalUtil;
import com.huigou.data.datamanagement.DataManageChooseOrgKind; import com.huigou.data.datamanagement.*;
import com.huigou.data.datamanagement.DataManageFieldsGroup;
import com.huigou.data.datamanagement.DataManageResource;
import com.huigou.data.datamanagement.DataManageResourceGroup;
import com.huigou.data.datamanagement.DataResourceKind;
import com.huigou.data.domain.model.CommonDomainConstants; import com.huigou.data.domain.model.CommonDomainConstants;
import com.huigou.data.jdbc.SQLQuery; import com.huigou.data.jdbc.SQLQuery;
import com.huigou.data.query.executor.SQLExecutorDao; import com.huigou.data.query.executor.SQLExecutorDao;
...@@ -31,11 +14,17 @@ import com.huigou.data.query.parser.model.PermissionModel; ...@@ -31,11 +14,17 @@ import com.huigou.data.query.parser.model.PermissionModel;
import com.huigou.exception.ApplicationException; import com.huigou.exception.ApplicationException;
import com.huigou.exception.ResourceLoadException; import com.huigou.exception.ResourceLoadException;
import com.huigou.express.ExpressManager; import com.huigou.express.ExpressManager;
import com.huigou.util.ClassHelper; import com.huigou.util.*;
import com.huigou.util.Constants; import org.springframework.beans.factory.annotation.Autowired;
import com.huigou.util.LogHome; import org.springframework.beans.factory.annotation.Value;
import com.huigou.util.StringPool; import org.springframework.stereotype.Service;
import com.huigou.util.StringUtil; import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.*;
import java.util.stream.Collectors;
@Service("queryPermissionBuilder") @Service("queryPermissionBuilder")
public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
...@@ -45,6 +34,10 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -45,6 +34,10 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
private static final String FIND_SUBORDINATIONS_FOR_NEAREST_MANAGER_METHOD_NAME = "findSubordinationsForNearestManager"; private static final String FIND_SUBORDINATIONS_FOR_NEAREST_MANAGER_METHOD_NAME = "findSubordinationsForNearestManager";
private static final String FIND_SUBORDINATIONS_BY_ORG_MANAGE_TYPE_METHOD_NAME = "findSubordinationsByOrgManageType"; private static final String FIND_SUBORDINATIONS_BY_ORG_MANAGE_TYPE_METHOD_NAME = "findSubordinationsByOrgManageType";
/**
* 自定义查询查询sql方言
*/
private String sqlDialect = "oracle";
@Resource(name = "permissionCache") @Resource(name = "permissionCache")
private ICache icache; private ICache icache;
...@@ -62,6 +55,12 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -62,6 +55,12 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
return icache; return icache;
} }
@Autowired(required = false)
@Value("${sqlDialect}")
public void setSqlDialect(String sqlDialect) {
this.sqlDialect = sqlDialect.toLowerCase();
}
private synchronized void initFindSubordinationsByOrgManageType() { private synchronized void initFindSubordinationsByOrgManageType() {
if (this.findSubordinationsByOrgManageTypeMethod == null) { if (this.findSubordinationsByOrgManageTypeMethod == null) {
try { try {
...@@ -73,7 +72,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -73,7 +72,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
this.findSubordinationsByOrgManageTypeMethod = clazz.getMethod(FIND_SUBORDINATIONS_BY_ORG_MANAGE_TYPE_METHOD_NAME, Object.class, String.class); this.findSubordinationsByOrgManageTypeMethod = clazz.getMethod(FIND_SUBORDINATIONS_BY_ORG_MANAGE_TYPE_METHOD_NAME, Object.class, String.class);
this.findSubordinationsForNearestManagerMethod = clazz.getMethod(FIND_SUBORDINATIONS_FOR_NEAREST_MANAGER_METHOD_NAME, Object.class, this.findSubordinationsForNearestManagerMethod = clazz.getMethod(FIND_SUBORDINATIONS_FOR_NEAREST_MANAGER_METHOD_NAME, Object.class,
String.class, Object.class, Boolean.class); String.class, Object.class, Boolean.class);
} catch (Exception e) { } catch (Exception e) {
throw new ApplicationException("初始化orgFun出错。"); throw new ApplicationException("初始化orgFun出错。");
...@@ -82,7 +81,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -82,7 +81,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
} }
@Override @Override
@SuppressWarnings({ "unchecked" }) @SuppressWarnings({"unchecked"})
public List<OrgUnit> findSubordinations(String personId, List<String> fullIds, String manageType) { public List<OrgUnit> findSubordinations(String personId, List<String> fullIds, String manageType) {
// manageType admin@inOrg=aaa,includeAllParent=false,isPersonMember=true // manageType admin@inOrg=aaa,includeAllParent=false,isPersonMember=true
if (StringUtil.isBlank(personId)) { if (StringUtil.isBlank(personId)) {
...@@ -102,8 +101,8 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -102,8 +101,8 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
list = (List<OrgUnit>) this.findSubordinationsByOrgManageTypeMethod.invoke(this.orgFun, fullIds, manageTypeParameter.getManageType()); list = (List<OrgUnit>) this.findSubordinationsByOrgManageTypeMethod.invoke(this.orgFun, fullIds, manageTypeParameter.getManageType());
} else { } else {
list = (List<OrgUnit>) this.findSubordinationsForNearestManagerMethod.invoke(orgFun, fullIds, manageTypeParameter.getManageType(), list = (List<OrgUnit>) this.findSubordinationsForNearestManagerMethod.invoke(orgFun, fullIds, manageTypeParameter.getManageType(),
manageTypeParameter.getInOrg(), manageTypeParameter.getInOrg(),
manageTypeParameter.getIsPersonMember()); manageTypeParameter.getIsPersonMember());
} }
icache.put(cacheKey, (Serializable) list); icache.put(cacheKey, (Serializable) list);
...@@ -393,7 +392,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -393,7 +392,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/** /**
* 根据权限类别编码及人员ID查询数据权限资源 * 根据权限类别编码及人员ID查询数据权限资源
* *
* @param code * @param code
* @param personId * @param personId
* @return * @return
...@@ -401,10 +400,22 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -401,10 +400,22 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
private List<DataManageResourceGroup> doQueryDataManagement(String code, String personId) { private List<DataManageResourceGroup> doQueryDataManagement(String code, String personId) {
QueryDescriptor queryDescriptor = this.sqlExecutorDao.getQuery(DATA_MANAGEMENT_XML_FILE_PATH, "dataManagement"); QueryDescriptor queryDescriptor = this.sqlExecutorDao.getQuery(DATA_MANAGEMENT_XML_FILE_PATH, "dataManagement");
// 查询包含的数据角色ID // 查询包含的数据角色ID
String sql = queryDescriptor.getSqlByName("queryPersonDataManageDetailByCode"); List<String> managedetalIds;
List<String> managedetalIds = this.sqlExecutorDao.queryToList(sql, String.class, code, personId); if (!"oracle".equals(sqlDialect)) {
String sql = queryDescriptor.getSqlByName("queryByManagetypeCodeAndPersonId");
managedetalIds = this.sqlExecutorDao.queryToList(sql, HashMap.class, code, personId).stream()
.collect(Collectors.groupingBy(m -> m.get("managetypeCode")))
.values()
.stream()
.flatMap(ms -> ms.stream().sorted(Comparator.<Map, String>comparing(m -> (String) m.get("managerFullId")).reversed()).limit(1))
.map(m -> (String) m.get("dataManagedetalId"))
.collect(Collectors.toList());
} else {
String sql = queryDescriptor.getSqlByName("queryPersonDataManageDetailByCode");
managedetalIds = this.sqlExecutorDao.queryToList(sql, String.class, code, personId);
}
if (managedetalIds == null || managedetalIds.size() == 0) { if (managedetalIds == null || managedetalIds.size() == 0) {
return null; return Collections.emptyList();
} }
List<DataManageResourceGroup> groups = new ArrayList<>(managedetalIds.size()); List<DataManageResourceGroup> groups = new ArrayList<>(managedetalIds.size());
// 查询数据角色包含的资源信息 // 查询数据角色包含的资源信息
...@@ -427,7 +438,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -427,7 +438,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/** /**
* 数据解析 * 数据解析
* *
* @param resource * @param resource
* @return * @return
*/ */
...@@ -451,7 +462,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -451,7 +462,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/** /**
* 解析执行组织机构取值函数 * 解析执行组织机构取值函数
* *
* @param resource * @param resource
* @return * @return
*/ */
...@@ -492,7 +503,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -492,7 +503,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/** /**
* 解析执行业务管理权限管理组织信息 * 解析执行业务管理权限管理组织信息
* *
* @param resource * @param resource
* @return * @return
*/ */
...@@ -518,7 +529,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder { ...@@ -518,7 +529,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/** /**
* 根据业务类别编码查询权限控制字段 * 根据业务类别编码查询权限控制字段
* *
* @param code * @param code
* @return * @return
*/ */
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-loader</artifactId> <artifactId>huigou-loader</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-system-common</artifactId> <artifactId>huigou-system-common</artifactId>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-uasp</artifactId> <artifactId>huigou-uasp</artifactId>
<name>huigou-uasp</name> <name>huigou-uasp</name>
...@@ -348,7 +348,7 @@ ...@@ -348,7 +348,7 @@
<dependency> <dependency>
<groupId>com.topsunit</groupId> <groupId>com.topsunit</groupId>
<artifactId>query-spring</artifactId> <artifactId>query-spring</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -166,6 +166,25 @@ ...@@ -166,6 +166,25 @@
</query> </query>
<query name="dataManagement" label="数据管理权限授权" table="SA_OPDATAMANAGEMENT"> <query name="dataManagement" label="数据管理权限授权" table="SA_OPDATAMANAGEMENT">
<sql name="queryByManagetypeCodeAndPersonId">
select m.data_managedetal_id,
t.code managetype_code,
o.full_id manager_full_id
from sa_opdatamanagement m,
sa_opdatamanagetype t,
sa_oporg o,
sa_opperson s,
sa_oporg p
where m.data_manage_id = t.id
and m.manager_id = o.id
and p.person_id = s.id
and p.full_id like concat(o.full_id, '%')
and p.status = 1
and o.status = 1
and t.status = 1
and t.code = ?
and s.id = ?
</sql>
<!-- 根据权限类别编码及人员ID查询数据权限资源定义ID 查询最近的授权记录--> <!-- 根据权限类别编码及人员ID查询数据权限资源定义ID 查询最近的授权记录-->
<sql name="queryPersonDataManageDetailByCode"> <sql name="queryPersonDataManageDetailByCode">
select distinct b.data_managedetal_id select distinct b.data_managedetal_id
......
<?xml version="1.0" encoding="UTF-8"?>
<query-mappings>
<query name="dataManagement" label="数据管理权限授权" table="SA_OPDATAMANAGEMENT">
<!-- 根据资源定义ID查询资源明细 -->
<sql name="queryDataManageDetailResource">
select k.code as data_kind_code,
k.data_kind,
t.resource_key as `key`,
t.resource_value as `value`,
t.full_id,
t.full_name,
t.org_data_kind
from sa_opdatamanagedetailresource t, sa_opdatakind k
where t.data_kind_id = k.id
and t.data_managedetal_id = ?
</sql>
</query>
</query-mappings>
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<artifactId>huigou-xt</artifactId> <artifactId>huigou-xt</artifactId>
<name>huigou-xt</name> <name>huigou-xt</name>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
<!-- test --> <!-- test -->
<junit.version>4.9</junit.version> <junit.version>4.9</junit.version>
<spring-data-mongodb.version>1.9.3.RELEASE</spring-data-mongodb.version> <spring-data-mongodb.version>1.9.3.RELEASE</spring-data-mongodb.version>
<huigou.uasp.version>1.2.4</huigou.uasp.version> <huigou.uasp.version>1.2.5</huigou.uasp.version>
<classgraph.version>4.8.43</classgraph.version> <classgraph.version>4.8.43</classgraph.version>
<fastjson.version>1.2.59</fastjson.version> <fastjson.version>1.2.59</fastjson.version>
</properties> </properties>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>root</artifactId> <artifactId>root</artifactId>
<version>1.2.4</version> <version>1.2.5</version>
</parent> </parent>
<groupId>com.topsunit</groupId> <groupId>com.topsunit</groupId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment