权限

112 阅读1分钟

一.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, []);
        }