VUE路由权限思路

VUE路由权限思路
直接复制到浏览器即可看到过滤后的路由

代码实现

    function filterAsyncRoutes(routes, roles) {
        const res = []

        routes.forEach(route => {
            const tmp = { ...route }
            if (hasPermission(roles, tmp)) {
                console.log('执行');
                if (tmp.children) {
                    tmp.children = filterAsyncRoutes(tmp.children, roles)
                }
                res.push(tmp)
            }
        })

        return res
    }

    function hasPermission(roles, route) {
        console.log('hasPermission',roles, route);
        if (route.meta && route.meta.roles) {
            return roles.some(role => route.meta.roles.includes(role))
        } else {
            return true
        }
    }

    const asyncRoutes = [
        {
            path: '/example',
            redirect: '/example/table',
            name: 'Example',
            meta: { title: 'Example', icon: 'el-icon-s-help' },
            children: [
                {
                    path: 'aaa',
                    name: 'aaa',
                    component: () => import('@/views/table/index'),
                    meta: { title: 'aaa', icon: 'aaa' },
                    children: [
                        {
                            path: 'bbb',
                            name: 'bbb',
                            component: () => import('@/views/table/index'),
                            meta: { title: 'bbb', icon: 'bbb' }
                        },

                    ]
                },
                {
                    path: 'table',
                    name: 'Table',
                    component: () => import('@/views/table/index'),
                    meta: { title: 'Table', icon: 'table' ,roles: ['admin']}
                },
                {
                    path: 'list',
                    name: 'ExportExcel',
                    component: () => import('@/views/article/index'),
                    meta: { title: 'article', icon: 'table', roles: ['editor'] }
                }
            ]
        },
        {
            path: 'external-link',
            children: [
                {
                    path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
                    meta: { title: 'External Link', icon: 'link', }
                }
            ]
        },

        // 404
        { path: '*', redirect: '/404', hidden: true }
    ]


    console.log(filterAsyncRoutes(asyncRoutes, ['admin']))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值