From 6d5a0d8a7e487db4ba278647f85fc86018558e0b Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期日, 30 五月 2021 02:20:21 +0800
Subject: [PATCH] update 完美修复 数据权限功能(支持单表多表过滤)
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 4
ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java | 7 +
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java | 234 +++++++++++++++++++++-------------------------
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java | 5
4 files changed, 114 insertions(+), 136 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
index 176878e..155f7c3 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
@@ -8,7 +8,7 @@
/**
* 鏁版嵁鏉冮檺杩囨护娉ㄨВ
- *
+ *
* @author ruoyi
*/
@Target(ElementType.METHOD)
@@ -25,4 +25,9 @@
* 鐢ㄦ埛琛ㄧ殑鍒悕
*/
public String userAlias() default "";
+
+ /**
+ * 鏄惁杩囨护鐢ㄦ埛鏉冮檺
+ */
+ public boolean isUser() default false;
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
index 9003bfc..e8ef101 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -24,169 +24,145 @@
/**
* 鏁版嵁杩囨护澶勭悊
*
- * @author ruoyi
+ * @author Lion Li
*/
@Aspect
@Component
-public class DataScopeAspect
-{
- /**
- * 鍏ㄩ儴鏁版嵁鏉冮檺
- */
- public static final String DATA_SCOPE_ALL = "1";
+public class DataScopeAspect {
- /**
- * 鑷畾鏁版嵁鏉冮檺
- */
- public static final String DATA_SCOPE_CUSTOM = "2";
+ /**
+ * 鍏ㄩ儴鏁版嵁鏉冮檺
+ */
+ public static final String DATA_SCOPE_ALL = "1";
- /**
- * 閮ㄩ棬鏁版嵁鏉冮檺
- */
- public static final String DATA_SCOPE_DEPT = "3";
+ /**
+ * 鑷畾鏁版嵁鏉冮檺
+ */
+ public static final String DATA_SCOPE_CUSTOM = "2";
- /**
- * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄�
- */
- public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
+ /**
+ * 閮ㄩ棬鏁版嵁鏉冮檺
+ */
+ public static final String DATA_SCOPE_DEPT = "3";
- /**
- * 浠呮湰浜烘暟鎹潈闄�
- */
- public static final String DATA_SCOPE_SELF = "5";
+ /**
+ * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄�
+ */
+ public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
- /**
- * 鏁版嵁鏉冮檺杩囨护鍏抽敭瀛�
- */
- public static final String DATA_SCOPE = "dataScope";
+ /**
+ * 浠呮湰浜烘暟鎹潈闄�
+ */
+ public static final String DATA_SCOPE_SELF = "5";
- // 閰嶇疆缁囧叆鐐�
- @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)")
- public void dataScopePointCut()
- {
- }
+ /**
+ * 鏁版嵁鏉冮檺杩囨护鍏抽敭瀛�
+ */
+ public static final String DATA_SCOPE = "dataScope";
- @Before("dataScopePointCut()")
- public void doBefore(JoinPoint point) throws Throwable
- {
+ // 閰嶇疆缁囧叆鐐�
+ @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)")
+ public void dataScopePointCut() {
+ }
+
+ @Before("dataScopePointCut()")
+ public void doBefore(JoinPoint point) throws Throwable {
clearDataScope(point);
- handleDataScope(point);
- }
+ handleDataScope(point);
+ }
- protected void handleDataScope(final JoinPoint joinPoint)
- {
- // 鑾峰緱娉ㄨВ
- DataScope controllerDataScope = getAnnotationLog(joinPoint);
- if (controllerDataScope == null)
- {
- return;
- }
- // 鑾峰彇褰撳墠鐨勭敤鎴�
- LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
- if (Validator.isNotNull(loginUser))
- {
- SysUser currentUser = loginUser.getUser();
- // 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹�
- if (Validator.isNotNull(currentUser) && !currentUser.isAdmin())
- {
- dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
- controllerDataScope.userAlias());
- }
- }
- }
+ protected void handleDataScope(final JoinPoint joinPoint) {
+ // 鑾峰緱娉ㄨВ
+ DataScope controllerDataScope = getAnnotationLog(joinPoint);
+ if (controllerDataScope == null) {
+ return;
+ }
+ // 鑾峰彇褰撳墠鐨勭敤鎴�
+ LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
+ if (Validator.isNotNull(loginUser)) {
+ SysUser currentUser = loginUser.getUser();
+ // 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹�
+ if (Validator.isNotNull(currentUser) && !currentUser.isAdmin()) {
+ dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
+ controllerDataScope.userAlias(), controllerDataScope.isUser());
+ }
+ }
+ }
- /**
- * 鏁版嵁鑼冨洿杩囨护
- *
- * @param joinPoint 鍒囩偣
- * @param user 鐢ㄦ埛
- * @param userAlias 鍒悕
- */
- public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias)
- {
- StringBuilder sqlString = new StringBuilder();
+ /**
+ * 鏁版嵁鑼冨洿杩囨护
+ *
+ * @param joinPoint 鍒囩偣
+ * @param user 鐢ㄦ埛
+ * @param userAlias 鍒悕
+ */
+ public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, boolean isUser) {
+ StringBuilder sqlString = new StringBuilder();
// 灏� "." 鎻愬彇鍑�,涓嶅啓鍒悕涓哄崟琛ㄦ煡璇�,鍐欏埆鍚嶄负澶氳〃鏌ヨ
deptAlias = StrUtil.isNotBlank(deptAlias) ? deptAlias + "." : "";
userAlias = StrUtil.isNotBlank(userAlias) ? userAlias + "." : "";
- for (SysRole role : user.getRoles())
- {
- String dataScope = role.getDataScope();
- if (DATA_SCOPE_ALL.equals(dataScope))
- {
- sqlString = new StringBuilder();
- break;
- }
- else if (DATA_SCOPE_CUSTOM.equals(dataScope))
- {
- sqlString.append(StrUtil.format(
- " OR {}dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
- role.getRoleId()));
- }
- else if (DATA_SCOPE_DEPT.equals(dataScope))
- {
- sqlString.append(StrUtil.format(" OR {}dept_id = {} ", deptAlias, user.getDeptId()));
- }
- else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
- {
- sqlString.append(StrUtil.format(
- " OR {}dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
- deptAlias, user.getDeptId(), user.getDeptId()));
- }
- else if (DATA_SCOPE_SELF.equals(dataScope))
- {
- if (StrUtil.isNotBlank(userAlias))
- {
- sqlString.append(StrUtil.format(" OR {}user_id = {} ", userAlias, user.getUserId()));
- }
- else
- {
- // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹�
- sqlString.append(" OR 1=0 ");
- }
- }
- }
+ for (SysRole role : user.getRoles()) {
+ String dataScope = role.getDataScope();
+ if (DATA_SCOPE_ALL.equals(dataScope)) {
+ sqlString = new StringBuilder();
+ break;
+ } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) {
+ sqlString.append(StrUtil.format(
+ " OR {}dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ",
+ deptAlias, role.getRoleId()));
+ } else if (DATA_SCOPE_DEPT.equals(dataScope)) {
+ sqlString.append(StrUtil.format(" OR {}dept_id = {} ",
+ deptAlias, user.getDeptId()));
+ } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
+ sqlString.append(StrUtil.format(
+ " OR {}dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
+ deptAlias, user.getDeptId(), user.getDeptId()));
+ } else if (DATA_SCOPE_SELF.equals(dataScope)) {
+ if (isUser) {
+ sqlString.append(StrUtil.format(" OR {}user_id = {} ",
+ userAlias, user.getUserId()));
+ } else {
+ // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹�
+ sqlString.append(" OR 1=0 ");
+ }
+ }
+ }
- if (StrUtil.isNotBlank(sqlString.toString()))
- {
+ if (StrUtil.isNotBlank(sqlString.toString())) {
putDataScope(joinPoint, sqlString.substring(4));
}
- }
+ }
- /**
- * 鏄惁瀛樺湪娉ㄨВ锛屽鏋滃瓨鍦ㄥ氨鑾峰彇
- */
- private DataScope getAnnotationLog(JoinPoint joinPoint)
- {
- Signature signature = joinPoint.getSignature();
- MethodSignature methodSignature = (MethodSignature) signature;
- Method method = methodSignature.getMethod();
+ /**
+ * 鏄惁瀛樺湪娉ㄨВ锛屽鏋滃瓨鍦ㄥ氨鑾峰彇
+ */
+ private DataScope getAnnotationLog(JoinPoint joinPoint) {
+ Signature signature = joinPoint.getSignature();
+ MethodSignature methodSignature = (MethodSignature) signature;
+ Method method = methodSignature.getMethod();
- if (method != null)
- {
- return method.getAnnotation(DataScope.class);
- }
- return null;
- }
+ if (method != null) {
+ return method.getAnnotation(DataScope.class);
+ }
+ return null;
+ }
/**
* 鎷兼帴鏉冮檺sql鍓嶅厛娓呯┖params.dataScope鍙傛暟闃叉娉ㄥ叆
*/
- private void clearDataScope(final JoinPoint joinPoint)
- {
+ private void clearDataScope(final JoinPoint joinPoint) {
Object params = joinPoint.getArgs()[0];
- if (Validator.isNotNull(params))
- {
+ if (Validator.isNotNull(params)) {
putDataScope(joinPoint, "");
}
}
private static void putDataScope(JoinPoint joinPoint, String sql) {
Object params = joinPoint.getArgs()[0];
- if (Validator.isNotNull(params))
- {
- if(params instanceof BaseEntity) {
+ if (Validator.isNotNull(params)) {
+ if (params instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) params;
baseEntity.getParams().put(DATA_SCOPE, sql);
} else {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
index 2376d8b..7b5d061 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -33,9 +33,6 @@
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ISysConfigService {
@Autowired
- private SysConfigMapper configMapper;
-
- @Autowired
private RedisCache redisCache;
/**
@@ -160,7 +157,7 @@
if (StrUtil.equals(UserConstants.YES, config.getConfigType())) {
throw new CustomException(String.format("鍐呯疆鍙傛暟銆�%1$s銆戜笉鑳藉垹闄� ", config.getConfigKey()));
}
- configMapper.deleteById(configId);
+ baseMapper.deleteById(configId);
redisCache.deleteObject(getCacheKey(config.getConfigKey()));
}
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 466714b..f729a81 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -52,7 +52,7 @@
private ISysConfigService configService;
@Override
- @DataScope(deptAlias = "d", userAlias = "u")
+ @DataScope(deptAlias = "d", userAlias = "u", isUser = true)
public TableDataInfo<SysUser> selectPageUserList(SysUser user) {
return PageUtils.buildDataInfo(baseMapper.selectPageUserList(PageUtils.buildPage(), user));
}
@@ -64,7 +64,7 @@
* @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
*/
@Override
- @DataScope(deptAlias = "d", userAlias = "u")
+ @DataScope(deptAlias = "d", userAlias = "u", isUser = true)
public List<SysUser> selectUserList(SysUser user) {
return baseMapper.selectUserList(user);
}
--
Gitblit v1.9.3