From 6ca853516671882e8e54d9630a4299f12fbcf9aa Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期四, 13 一月 2022 11:14:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/satoken' into dev

---
 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java |  138 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 138 insertions(+), 0 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
new file mode 100644
index 0000000..58427da
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -0,0 +1,138 @@
+package com.ruoyi.framework.aspectj;
+
+import com.ruoyi.common.annotation.DataScope;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.service.UserService;
+import com.ruoyi.common.utils.LoginUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鏁版嵁杩囨护澶勭悊
+ *
+ * @author Lion Li
+ * @deprecated 3.6.0 绉婚櫎 {@link com.ruoyi.framework.handler.PlusDataPermissionHandler}
+ */
+@Aspect
+@Component
+@Deprecated
+public class DataScopeAspect {
+
+	/**
+	 * 鍏ㄩ儴鏁版嵁鏉冮檺
+	 */
+	public static final String DATA_SCOPE_ALL = "1";
+
+	/**
+	 * 鑷畾鏁版嵁鏉冮檺
+	 */
+	public static final String DATA_SCOPE_CUSTOM = "2";
+
+	/**
+	 * 閮ㄩ棬鏁版嵁鏉冮檺
+	 */
+	public static final String DATA_SCOPE_DEPT = "3";
+
+	/**
+	 * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄�
+	 */
+	public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
+
+	/**
+	 * 浠呮湰浜烘暟鎹潈闄�
+	 */
+	public static final String DATA_SCOPE_SELF = "5";
+
+	/**
+	 * 鏁版嵁鏉冮檺杩囨护鍏抽敭瀛�
+	 */
+	public static final String DATA_SCOPE = "dataScope";
+
+	@Before("@annotation(controllerDataScope)")
+	public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable {
+		clearDataScope(point);
+		handleDataScope(point, controllerDataScope);
+	}
+
+	protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) {
+		// 鑾峰彇褰撳墠鐨勭敤鎴�
+		SysUser currentUser = SpringUtils.getBean(UserService.class).selectUserById(LoginUtils.getUserId());
+		// 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹�
+		if (StringUtils.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, boolean isUser) {
+		StringBuilder sqlString = new StringBuilder();
+
+		// 灏� "." 鎻愬彇鍑�,涓嶅啓鍒悕涓哄崟琛ㄦ煡璇�,鍐欏埆鍚嶄负澶氳〃鏌ヨ
+		deptAlias = StringUtils.isNotBlank(deptAlias) ? deptAlias + "." : "";
+		userAlias = StringUtils.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(StringUtils.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(StringUtils.format(" OR {}dept_id = {} ",
+					deptAlias, user.getDeptId()));
+			} else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
+				sqlString.append(StringUtils.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(StringUtils.format(" OR {}user_id = {} ",
+						userAlias, user.getUserId()));
+				} else {
+					// 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹�
+					sqlString.append(" OR 1=0 ");
+				}
+			}
+		}
+
+		if (StringUtils.isNotBlank(sqlString.toString())) {
+			putDataScope(joinPoint, sqlString.substring(4));
+		}
+	}
+
+	/**
+	 * 鎷兼帴鏉冮檺sql鍓嶅厛娓呯┖params.dataScope鍙傛暟闃叉娉ㄥ叆
+	 */
+	private void clearDataScope(final JoinPoint joinPoint) {
+		Object params = joinPoint.getArgs()[0];
+		if (StringUtils.isNotNull(params)) {
+			putDataScope(joinPoint, "");
+		}
+	}
+
+	private static void putDataScope(JoinPoint joinPoint, String sql) {
+		Object params = joinPoint.getArgs()[0];
+		if (StringUtils.isNotNull(params)) {
+			if (params instanceof BaseEntity) {
+				BaseEntity baseEntity = (BaseEntity) params;
+				baseEntity.getParams().put(DATA_SCOPE, sql);
+			}
+		}
+	}
+}

--
Gitblit v1.9.3