作者 RuoYi

支持多权限字符匹配角色数据权限

@@ -27,7 +27,7 @@ public @interface DataScope @@ -27,7 +27,7 @@ public @interface DataScope
27 public String userAlias() default ""; 27 public String userAlias() default "";
28 28
29 /** 29 /**
30 - * 权限字符(如不填默认会自动根据注解获取) 30 + * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来
31 */ 31 */
32 public String permission() default ""; 32 public String permission() default "";
33 } 33 }
@@ -325,6 +325,32 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils @@ -325,6 +325,32 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
325 } 325 }
326 326
327 /** 327 /**
  328 + * 判断给定的set列表中是否包含数组array 判断给定的数组array中是否包含给定的元素value
  329 + *
  330 + * @param set 给定的集合
  331 + * @param array 给定的数组
  332 + * @return boolean 结果
  333 + */
  334 + public static boolean containsAny(Collection<String> collection, String... array)
  335 + {
  336 + if (isEmpty(collection) || isEmpty(array))
  337 + {
  338 + return false;
  339 + }
  340 + else
  341 + {
  342 + for (String str : array)
  343 + {
  344 + if (collection.contains(str))
  345 + {
  346 + return true;
  347 + }
  348 + }
  349 + return false;
  350 + }
  351 + }
  352 +
  353 + /**
328 * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 354 * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写
329 * 355 *
330 * @param cs 指定字符串 356 * @param cs 指定字符串
@@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.BaseEntity; @@ -11,6 +11,7 @@ import com.ruoyi.common.core.domain.BaseEntity;
11 import com.ruoyi.common.core.domain.entity.SysRole; 11 import com.ruoyi.common.core.domain.entity.SysRole;
12 import com.ruoyi.common.core.domain.entity.SysUser; 12 import com.ruoyi.common.core.domain.entity.SysUser;
13 import com.ruoyi.common.core.domain.model.LoginUser; 13 import com.ruoyi.common.core.domain.model.LoginUser;
  14 +import com.ruoyi.common.core.text.Convert;
14 import com.ruoyi.common.utils.SecurityUtils; 15 import com.ruoyi.common.utils.SecurityUtils;
15 import com.ruoyi.common.utils.StringUtils; 16 import com.ruoyi.common.utils.StringUtils;
16 import com.ruoyi.framework.security.context.PermissionContextHolder; 17 import com.ruoyi.framework.security.context.PermissionContextHolder;
@@ -99,7 +100,8 @@ public class DataScopeAspect @@ -99,7 +100,8 @@ public class DataScopeAspect
99 { 100 {
100 continue; 101 continue;
101 } 102 }
102 - if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions()) && !role.getPermissions().contains(permission)) 103 + if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions())
  104 + && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission)))
103 { 105 {
104 continue; 106 continue;
105 } 107 }
@@ -76,6 +76,7 @@ public class PermissionService @@ -76,6 +76,7 @@ public class PermissionService
76 { 76 {
77 return false; 77 return false;
78 } 78 }
  79 + PermissionContextHolder.setContext(permissions);
79 Set<String> authorities = loginUser.getPermissions(); 80 Set<String> authorities = loginUser.getPermissions();
80 for (String permission : permissions.split(PERMISSION_DELIMETER)) 81 for (String permission : permissions.split(PERMISSION_DELIMETER))
81 { 82 {