ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/helper/DataPermissionHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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 èªè¡ç¼å * 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"); } } 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 @@ /** * æé æ°æ®è¿æ»¤sql */ 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()); // è·åè§è²æéæ³å