From 99de90a015fb0494950f6f52f03ab5c34d192eee Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期一, 28 六月 2021 19:23:02 +0800
Subject: [PATCH] update 更新配置注释(规范使用方法)
---
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java | 256 +++++++++++++++++++++++----------------------------
1 files changed, 116 insertions(+), 140 deletions(-)
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 a7c87ef..830dbe5 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
@@ -8,6 +8,7 @@
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.web.service.TokenService;
import org.aspectj.lang.JoinPoint;
@@ -24,175 +25,150 @@
/**
* 鏁版嵁杩囨护澶勭悊
*
- * @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());
- }
- }
- }
-
- /**
- * 鏁版嵁鑼冨洿杩囨护
- *
- * @param joinPoint 鍒囩偣
- * @param user 鐢ㄦ埛
- * @param userAlias 鍒悕
- */
- public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias)
- {
- StringBuilder sqlString = new StringBuilder();
-
- 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 ");
- }
- }
- }
-
- if (StrUtil.isNotBlank(sqlString.toString()))
- {
- putDataScope(joinPoint, "AND (" + sqlString.substring(4) + ")");
+ 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());
+ }
+ }
+ }
- /**
- * 鏄惁瀛樺湪娉ㄨВ锛屽鏋滃瓨鍦ㄥ氨鑾峰彇
- */
- private DataScope getAnnotationLog(JoinPoint joinPoint)
- {
- Signature signature = joinPoint.getSignature();
- MethodSignature methodSignature = (MethodSignature) signature;
- Method method = methodSignature.getMethod();
+ /**
+ * 鏁版嵁鑼冨洿杩囨护
+ *
+ * @param joinPoint 鍒囩偣
+ * @param user 鐢ㄦ埛
+ * @param userAlias 鍒悕
+ */
+ public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, boolean isUser) {
+ StringBuilder sqlString = new StringBuilder();
- if (method != null)
- {
- return method.getAnnotation(DataScope.class);
- }
- return null;
- }
+ // 灏� "." 鎻愬彇鍑�,涓嶅啓鍒悕涓哄崟琛ㄦ煡璇�,鍐欏埆鍚嶄负澶氳〃鏌ヨ
+ 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 (isUser) {
+ sqlString.append(StrUtil.format(" OR {}user_id = {} ",
+ userAlias, user.getUserId()));
+ } else {
+ // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹�
+ sqlString.append(" OR 1=0 ");
+ }
+ }
+ }
+
+ 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();
+
+ 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 {
- try {
- Method getParams = params.getClass().getDeclaredMethod("getParams", null);
- Map<String, Object> invoke = (Map<String, Object>) getParams.invoke(params, null);
- invoke.put(DATA_SCOPE, sql);
- } catch (Exception e) {
- // 鏂规硶鏈壘鍒� 涓嶅鐞�
- }
+ Map<String, Object> invoke = ReflectUtils.invokeGetter(params, "params");
+ invoke.put(DATA_SCOPE, sql);
}
}
}
--
Gitblit v1.9.3