From 5d2b162bea9c6d67dfd62a3a096f427ccf7278d6 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期五, 17 十二月 2021 21:52:11 +0800
Subject: [PATCH] add 增加 DataPermissionHelper 类 便于操作数据权限变量
---
ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java | 45 ++++++++++++++++++++++
ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java | 2
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java | 16 +++++--
3 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java
index 3deeecf..7cf3d5e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java
@@ -10,7 +10,7 @@
* 璇硶鏀寔 spel 妯℃澘琛ㄨ揪寮�
*
* 鍐呯疆鏁版嵁 user 褰撳墠鐢ㄦ埛 鍐呭鍙傝�� SysUser
- * 濡傞渶鎵╁睍鏁版嵁 闇�寰� SysUser 鍐呮敞鍏�
+ * 濡傞渶鎵╁睍鏁版嵁 鍙娇鐢� {@link com.ruoyi.common.helper.DataPermissionHelper} 鎿嶄綔
* 鍐呯疆鏈嶅姟 sdss 绯荤粺鏁版嵁鏉冮檺鏈嶅姟 鍐呭鍙傝�� SysDataScopeService
* 濡傞渶鎵╁睍鏇村鑷畾涔夋湇鍔� 鍙互鍙傝�� sdss 鑷缂栧啓
*
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java
new file mode 100644
index 0000000..96f5425
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java
@@ -0,0 +1,45 @@
+package com.ruoyi.common.helper;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.ruoyi.common.utils.ServletUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鏁版嵁鏉冮檺鍔╂墜
+ *
+ * @author Lion Li
+ * @version 3.5.0
+ */
+@SuppressWarnings("unchecked cast")
+public class DataPermissionHelper {
+
+ private static final String DATA_PERMISSION_KEY = "data:permission";
+
+ public static <T> T getVariable(String key) {
+ Map<String, Object> context = getContext();
+ return (T) context.get(key);
+ }
+
+
+
+ public static void setVariable(String key, Object value) {
+ Map<String, Object> context = getContext();
+ context.put(key, value);
+ }
+
+ public static Map<String, Object> getContext() {
+ HttpServletRequest request = ServletUtils.getRequest();
+ Object attribute = request.getAttribute(DATA_PERMISSION_KEY);
+ if (ObjectUtil.isNull(attribute)) {
+ request.setAttribute(DATA_PERMISSION_KEY, new HashMap<>());
+ attribute = request.getAttribute(DATA_PERMISSION_KEY);
+ }
+ if (attribute instanceof Map) {
+ return (Map<String, Object>) attribute;
+ }
+ throw new NullPointerException("data permission context type exception");
+ }
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java
index 6cec140..d5f4f58 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java
@@ -12,6 +12,7 @@
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.enums.DataScopeType;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.helper.DataPermissionHelper;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
@@ -73,12 +74,16 @@
inavlidCacheSet.add(mappedStatementId);
return where;
}
- SysUser currentUser = SpringUtils.getBean(UserService.class).selectUserById(SecurityUtils.getUserId());
+ SysUser currentUser = DataPermissionHelper.getVariable("user");
+ if (ObjectUtil.isNull(currentUser)) {
+ currentUser = SpringUtils.getBean(UserService.class).selectUserById(SecurityUtils.getUserId());
+ DataPermissionHelper.setVariable("user", currentUser);
+ }
// 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹�
- if (StringUtils.isNull(currentUser) || currentUser.isAdmin()) {
+ if (ObjectUtil.isNull(currentUser) || currentUser.isAdmin()) {
return where;
}
- String dataFilterSql = buildDataFilter(currentUser, dataColumns, isSelect);
+ String dataFilterSql = buildDataFilter(dataColumns, isSelect);
if (StringUtils.isBlank(dataFilterSql)) {
return where;
}
@@ -99,13 +104,14 @@
/**
* 鏋勯�犳暟鎹繃婊ql
*/
- private String buildDataFilter(SysUser user, DataColumn[] dataColumns, boolean isSelect) {
+ private String buildDataFilter(DataColumn[] dataColumns, boolean isSelect) {
StringBuilder sqlString = new StringBuilder();
// 鏇存柊鎴栧垹闄ら渶婊¤冻鎵�鏈夋潯浠�
String joinStr = isSelect ? " OR " : " AND ";
+ SysUser user = DataPermissionHelper.getVariable("user");
StandardEvaluationContext context = new StandardEvaluationContext();
context.setBeanResolver(beanResolver);
- context.setVariable("user", user);
+ DataPermissionHelper.getContext().forEach(context::setVariable);
for (SysRole role : user.getRoles()) {
user.setRoleId(role.getRoleId());
// 鑾峰彇瑙掕壊鏉冮檺娉涘瀷
--
Gitblit v1.9.3