我现在做的项目需要设置用户多个权限:
像munu.js文件设置的菜单
const menuData = [{
name: '1',
authority: ['admin'],
}, {
name: '2',
authority: ['admin','user'],
}, {
name: '3',
authority: ['admin','yin'],
}];
现在项目需要后端可以随意给用户添加和删除权限,给用户添加了‘user’权限,就可以访问菜单2,移除'user'权限就不能访问菜单2
但是这样设置setAuthority(['admin', 'yin', 'user']);就会报错
我需要怎么做呢?
Translation of this issue:
The project I am currently doing needs to set multiple user permissions:
Menus set like mutu.js file
const menuData = [{
Name: '1',
Authority: ['admin'],
}, {
Name: '2',
Authority: ['admin','user'],
}, {
Name: '3',
Authority: ['admin','yin'],
}];
Now the project needs the backend to be able to add and remove permissions to the user at will, adding the ‘user’ permission to the user, accessing menu 2, and removing the 'user' permission to access menu 2
However, setting `setAuthority(['admin', 'yin', 'user']);
What do I need to do?
可以通过传入方法的方式进行判断
可以说的更详细一点吗?
setAuthority()函数原型是
export function setAuthority(authority) {
return localStorage.setItem('antd-pro-authority', authority);
}
传入方法进行判断,是要判断什么?是与menu.js里面的authority[]数组判断吗?
特别关注这个问题.
<传入方法>有例子么?@chenshuai2144
https://pro.ant.design/components/Authorized-cn/#scaffold-src-components-Authorized-demo-AuthorizedArray
这种设置权限的方法并不是给单独每个用户设置的,我想要的效果是用户登录后可以为用户设置多个权限。
这个有个相关讨论。
有人做出来了 你可以试试
https://github.com/ant-design/ant-design-pro/pull/508
@xzk821649509 为什么不控制菜单显示呢? 不能解决吗 让后台返回菜单不就可以了吗?
目前好像官方还没有支持,提供一个我的改造方法给你参考一下,比较简单,不破坏原始逻辑.
1,修改 src/components/Authorized/index.js 方法:renderAuthorize
-let CURRENT = 'NULL';
+let CURRENT = ['NULL'];
if (currentAuthority.constructor.name === 'String') {
+ CURRENT = [currentAuthority];
+ }
+ if (currentAuthority.constructor.name === 'Array') {
CURRENT = currentAuthority;
}
- CURRENT = 'NULL';
+ CURRENT = ['NULL'];
2,修改 src/components/Authorized/CheckPermissions.js 方法:checkPermissions
// 数组处理 两个都是数组时检查是否有交集,有的话就认为有权限
if (Array.isArray(authority)) {
- if (authority.indexOf(currentAuthority) >= 0) {
+ if (authority.filter(v => currentAuthority.includes(v)).length > 0) {
return target;
}
return Exception;
}
// string 处理
if (typeof authority === 'string') {
- if (authority === currentAuthority) {
+ if (currentAuthority.indexOf(authority) >= 0) {
return target;
}
return Exception;
}
@yjy8749 谢谢大神,帮我解决了困扰我几天的问题
@xzk821649509 抱歉,修改了一下,copy diff 时没有拷全,数组交集判断时的逻辑是 length > 0 手残写错了, CURRENT 默认值为了统一也修改成数组
Most helpful comment
目前好像官方还没有支持,提供一个我的改造方法给你参考一下,比较简单,不破坏原始逻辑.
1,修改 src/components/Authorized/index.js 方法:renderAuthorize
2,修改 src/components/Authorized/CheckPermissions.js 方法:checkPermissions