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