一.RBAC模板功能
a.用户管理:用户列表,添加用户,编辑用户,设置角色
b.角色管理:角色列表,添加角色,编辑角色,设置角色
c.权限管理:权限列表,添加权限,编辑权限
二.常规管理系统中的权限
a.根据登录用户返回菜单列表--可能是一棵树
b.根据登录用户控制接口权限
三.前台系统中的权限管理
a.更专注入口的控制
b.越权的提示也不可少
c.多级权限可能会涉及到计算
四.菜单列表通常是一个树的结构,后端一般喜欢一个列表(数组),该如何去构建?
a.给定原始数据(originData),期待生成一个树形结构的对象(treeData)
const originData = [
{
id: 0,
parentId: null,
name: '生物'
},
{
id: 1,
parentId: 0,
name: '动物'
},
{
id: 2,
parentId: 0,
name: '植物'
},
{
id: 3,
parentId: 0,
name: '微生物'
},
{
id: 4,
parentId: 1,
name: '哺乳动物'
},
{
id: 5,
parentId: 1,
name: '卵生动物'
},
{
id: 6,
parentId: 2,
name: '种子植物'
},
{
id: 7,
parentId: 2,
name: '蕨类植物'
},
{
id: 8,
parentId: 4,
name: '大象'
},
{
id: 9,
parentId: 4,
name: '海豚'
},
{
id: 10,
parentId: 6,
name: '玫瑰花'
}
]
function arrayToTree(arr) {
if (!Array.isArray(arr) || arr.length < 1) return null;
const [root] = arr.filter(item => item.parentId === null);
const addChildren = (node, dataList) => {
const children = dataList.filter(item => item.parentId === node.id).map(
item => addChildren(item, dataList)
);
return { ...node, children};
}
return addChildren(root, arr)
}
console.log(arrayToTree(originData), 'originData')
function treeToArray(node) {
const nodeToArray = (node, arr) => {
const { children, ...item } = node;
arr.push(item)
children.forEach(child => nodeToArray(child, arr));
return arr;
};
return nodeToArray(node, []);
}