diff --git a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java
index ce4cde92b7..3a60549d6a 100644
--- a/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java
+++ b/epmet-commons/epmet-commons-mybatis/src/main/java/com/epmet/commons/mybatis/aspect/DataFilterAspect.java
@@ -1,22 +1,11 @@
-/**
- * Copyright (c) 2018 人人开源 All rights reserved.
- *
- * https://www.renren.io
- *
- * 版权所有,侵权必究!
- */
-
package com.epmet.commons.mybatis.aspect;
import com.epmet.commons.mybatis.annotation.DataFilter;
import com.epmet.commons.mybatis.feign.MybatisGovAccessFeignClient;
-import com.epmet.commons.tools.constant.AccessSettingConstant;
-import com.epmet.commons.tools.constant.OpeScopeConstant;
import com.epmet.commons.mybatis.dto.form.*;
import com.epmet.commons.tools.constant.ThreadLocalConstant;
-import com.epmet.commons.tools.dto.form.LoginUserInfoResultDTO;
-import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
+import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.Result;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
@@ -28,9 +17,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
/**
* 数据过滤,切面处理类
@@ -44,13 +30,11 @@ public class DataFilterAspect {
private static final Logger log = LoggerFactory.getLogger(DataFilterAspect.class);
- /**
- * 线程变量,记录是否已经添加了至少一个过滤条件
- */
- private static final ThreadLocal hasConditions = new ThreadLocal();
+ @Autowired
+ private LoginUserUtil loginUserUtil;
@Autowired
- private MybatisGovAccessFeignClient govAccessFeignClient;
+ private MybatisGovAccessFeignClient mybatisGovAccessFeignClient;
@Before("@annotation(com.epmet.commons.mybatis.annotation.DataFilter)")
public void dataFilter(JoinPoint point) {
@@ -88,22 +72,17 @@ public class DataFilterAspect {
}
}
- LoginUserInfoResultDTO loginUserInfo = ThreadLocalConstant.loginUserInfoTl.get();
-
- hasConditions.set(false);
+ //LoginUserInfoResultDTO loginUserInfo = getLoginUserInfo();
- // 生成过滤sql
- String sqlFilterSegment = getSqlFilterSegment(
- loginUserInfo.getUserId(),
- loginUserInfo.getRoleIdList(),
- requirePermission,
- loginUserInfo.getOrgIdPath(),
- loginUserInfo.getGridIdList(),
- tableAlias,
- loginUserInfo.getDeptIdList(),
- gridId,
- deptId,
- requirePermission);
+ GetSQLFilterFormDTO form = new GetSQLFilterFormDTO();
+ form.setApp(loginUserUtil.getLoginUserApp());
+ form.setClient(loginUserUtil.getLoginUserClient());
+ form.setUserId(loginUserUtil.getLoginUserId());
+ form.setDepartmentId(deptId);
+ form.setGridId(gridId);
+ form.setOperationKey(requirePermission);
+ form.setTableAlias(tableAlias);
+ Result sqlFilterSegmentRst = mybatisGovAccessFeignClient.getSqlFilterSegment(form);
// 方式1.填充到Service方法列表中的DataScope对象中。如果dao入参是用DTO的话,那么再加一个DataScope入参,sql中会报错提示#{}参数找不到,因此改用方法2
//Object[] methodArgs = point.getArgs();
@@ -115,319 +94,13 @@ public class DataFilterAspect {
//}
// 方式2,采用ThreadLocal传参到DataFilterInterceptor中
- if (StringUtils.isNotBlank(sqlFilterSegment)) {
- ThreadLocalConstant.sqlFilter.set(sqlFilterSegment);
- }
- }
-
- /**
- * 生成过滤sql片段
- *
- * @return
- */
- private String getSqlFilterSegment(String userId, Set roleIds, String reqiurePermission, String orgIdPath,
- Set gridIdList, String tableAlias, Set deptIds, String gridId, String deptId,
- String operationKey) {
-
- StringBuilder sb = new StringBuilder();
-
- Map accessSettings = listRoleAccessSettings(roleIds, operationKey);
-
- // 1.生成sql:组织范围过滤
- if (!genOrgScopeSql(sb, orgIdPath, roleIds, reqiurePermission, tableAlias)) {
- // 返回false,说明已经开启了all所有范围,后续条件不在拼接入sql,结束执行
- return sb.toString();
- }
-
- // 2.生成sql:我发起的
- String iCreated = accessSettings.get(AccessSettingConstant.I_CREATED_KEY);
- if (StringUtils.isNotBlank(iCreated) && AccessSettingConstant.I_CREATED_ON.equals(iCreated)) {
- genICreatedSql(sb, userId, tableAlias);
- }
- // 3.生成sql:本网格的
- String inGrid = accessSettings.get(AccessSettingConstant.IN_GRID_KEY);
- if (StringUtils.isNotBlank(inGrid) && AccessSettingConstant.IN_GRID_ON.equals(inGrid)) {
- if (StringUtils.isBlank(gridId)) {
- log.error("DataFilter:拼接SQL语句出错:需要in grid权限,但是代码中没有获取到:{}", gridId);
- throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
- }
- genInGrid(sb, gridId, tableAlias);
- }
-
- // 4.生成sql:根据部门列表
- String inDept = accessSettings.get(AccessSettingConstant.IN_DEPARTMENT_KEY);
- if (StringUtils.isNotBlank(inDept) && AccessSettingConstant.IN_DEPARTMENT_ON.equals(inDept)) {
- if (StringUtils.isBlank(deptId)) {
- log.error("DataFilter:拼接SQL语句出错:需要in department权限,但是代码中没有获取到:{}", deptId);
- throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
- }
- genDepartmentFilterSql(sb, deptId, tableAlias);
+ if (!sqlFilterSegmentRst.success()) {
+ throw new RenException("DataFilterAspect调用Access服务生成SqlFilterSegment失败:" + sqlFilterSegmentRst.getMsg());
}
- return sb.toString();
- }
-
- /**
- * 列出角色对应的权限设置项
- *
- * @param roleIds
- * @return
- */
- private Map listRoleAccessSettings(Set roleIds, String operationKey) {
- Map settings = new HashMap<>();
- roleIds.forEach(roleId -> {
- settings.putAll(listRoleAccessSettings(roleId, operationKey));
- });
- return settings;
- }
-
- private Map listRoleAccessSettings(String roleId, String operationKey) {
- AccessSettingFormDTO accessSettingFormDTO = new AccessSettingFormDTO();
- accessSettingFormDTO.setRoleId(roleId);
- accessSettingFormDTO.setOperationKey(operationKey);
- Result