Commit ecaee512 authored by 雍欢's avatar 雍欢

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

parent d8f29bf5
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-common</artifactId>
<name>huigou-common</name>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-core-api</artifactId>
<name>huigou-core-api</name>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-core-impl</artifactId>
<name>huigou-core-impl</name>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-core-proxy</artifactId>
<name>huigou-core-proxy</name>
......
......@@ -6,7 +6,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-data</artifactId>
<name>huigou-data</name>
......
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.context.Operator;
import com.huigou.context.OrgUnit;
import com.huigou.context.ThreadLocalUtil;
import com.huigou.data.datamanagement.DataManageChooseOrgKind;
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.datamanagement.*;
import com.huigou.data.domain.model.CommonDomainConstants;
import com.huigou.data.jdbc.SQLQuery;
import com.huigou.data.query.executor.SQLExecutorDao;
......@@ -31,11 +14,17 @@ import com.huigou.data.query.parser.model.PermissionModel;
import com.huigou.exception.ApplicationException;
import com.huigou.exception.ResourceLoadException;
import com.huigou.express.ExpressManager;
import com.huigou.util.ClassHelper;
import com.huigou.util.Constants;
import com.huigou.util.LogHome;
import com.huigou.util.StringPool;
import com.huigou.util.StringUtil;
import com.huigou.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
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")
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_BY_ORG_MANAGE_TYPE_METHOD_NAME = "findSubordinationsByOrgManageType";
/**
* 自定义查询查询sql方言
*/
private String sqlDialect = "oracle";
@Resource(name = "permissionCache")
private ICache icache;
......@@ -62,6 +55,12 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
return icache;
}
@Autowired(required = false)
@Value("${sqlDialect}")
public void setSqlDialect(String sqlDialect) {
this.sqlDialect = sqlDialect.toLowerCase();
}
private synchronized void initFindSubordinationsByOrgManageType() {
if (this.findSubordinationsByOrgManageTypeMethod == null) {
try {
......@@ -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.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) {
throw new ApplicationException("初始化orgFun出错。");
......@@ -82,7 +81,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
}
@Override
@SuppressWarnings({ "unchecked" })
@SuppressWarnings({"unchecked"})
public List<OrgUnit> findSubordinations(String personId, List<String> fullIds, String manageType) {
// manageType admin@inOrg=aaa,includeAllParent=false,isPersonMember=true
if (StringUtil.isBlank(personId)) {
......@@ -102,8 +101,8 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
list = (List<OrgUnit>) this.findSubordinationsByOrgManageTypeMethod.invoke(this.orgFun, fullIds, manageTypeParameter.getManageType());
} else {
list = (List<OrgUnit>) this.findSubordinationsForNearestManagerMethod.invoke(orgFun, fullIds, manageTypeParameter.getManageType(),
manageTypeParameter.getInOrg(),
manageTypeParameter.getIsPersonMember());
manageTypeParameter.getInOrg(),
manageTypeParameter.getIsPersonMember());
}
icache.put(cacheKey, (Serializable) list);
......@@ -393,7 +392,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/**
* 根据权限类别编码及人员ID查询数据权限资源
*
*
* @param code
* @param personId
* @return
......@@ -401,10 +400,22 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
private List<DataManageResourceGroup> doQueryDataManagement(String code, String personId) {
QueryDescriptor queryDescriptor = this.sqlExecutorDao.getQuery(DATA_MANAGEMENT_XML_FILE_PATH, "dataManagement");
// 查询包含的数据角色ID
String sql = queryDescriptor.getSqlByName("queryPersonDataManageDetailByCode");
List<String> managedetalIds = this.sqlExecutorDao.queryToList(sql, String.class, code, personId);
List<String> managedetalIds;
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) {
return null;
return Collections.emptyList();
}
List<DataManageResourceGroup> groups = new ArrayList<>(managedetalIds.size());
// 查询数据角色包含的资源信息
......@@ -427,7 +438,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/**
* 数据解析
*
*
* @param resource
* @return
*/
......@@ -451,7 +462,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/**
* 解析执行组织机构取值函数
*
*
* @param resource
* @return
*/
......@@ -492,7 +503,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/**
* 解析执行业务管理权限管理组织信息
*
*
* @param resource
* @return
*/
......@@ -518,7 +529,7 @@ public class QueryPermissionBuilderImpl implements QueryPermissionBuilder {
/**
* 根据业务类别编码查询权限控制字段
*
*
* @param code
* @return
*/
......
......@@ -5,7 +5,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-loader</artifactId>
<packaging>jar</packaging>
......
......@@ -5,7 +5,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-system-common</artifactId>
......
......@@ -4,7 +4,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-uasp</artifactId>
<name>huigou-uasp</name>
......@@ -348,7 +348,7 @@
<dependency>
<groupId>com.topsunit</groupId>
<artifactId>query-spring</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</dependency>
</dependencies>
<build>
......
......@@ -166,6 +166,25 @@
</query>
<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 查询最近的授权记录-->
<sql name="queryPersonDataManageDetailByCode">
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 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<artifactId>huigou-xt</artifactId>
<name>huigou-xt</name>
......
......@@ -6,7 +6,7 @@
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
<packaging>pom</packaging>
<modules>
......@@ -158,7 +158,7 @@
<!-- test -->
<junit.version>4.9</junit.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>
<fastjson.version>1.2.59</fastjson.version>
</properties>
......
......@@ -7,7 +7,7 @@
<parent>
<groupId>com.huigou</groupId>
<artifactId>root</artifactId>
<version>1.2.4</version>
<version>1.2.5</version>
</parent>
<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