token鉴权与权限菜单

token鉴权:用户登陆后,后端会生成一个token令牌返回给前端,前端需要保存在本地。

在其他需要token鉴权的接口调用时,携带token设置请求头Authorization发送给后端,后端会验证token是否过期,如果没有过期,就响应前端请求的数据。

token的应用:统一登录认证(借助token判断用户是否登录)。

import router from "./router";
// 全局前置导航
router.beforeEach(async (to, from) => {
    // return true 放行
    // return false 不放行
    // to 要去哪个路由;from 从哪个路由过来的
    let path = to.path.split('?')[0]
    if(to.path == '/login') {
        return true
    }
    let token = localStorage.getItem('token') // 查看是否登录,未登录
    if(!token) {
        // 如果不存在,跳转到登录页
        router.replace({path: '/login'})
    } else {
        return true
    }
})

动态权限菜单:

1.根据角色的id,获取用户的权限菜单列表

2.利用递归格式化列表成路由router对应的结构,使用import.meta.glob获取views下所有的组件,

再利用路径找到viewsComponents中对应的组件

// import.meta.glob获取路径下所有的组件
const viewsComponents = import.meta.glob('@/views/**/*.vue')
export const useMenu = list => {
    const newMenuList = []
    if(!list.length) return
    list.forEach(subItem => {
        let children
         // 判断是否又children子组件,有的话,也需要格式化
        if (subItem.children && Array.isArray(subItem.children)) {
            children = useMenu(subItem.children)
        }
        const { path, meta, label, id, iconCls } = subItem
        const keys = {
            id,
            path,
            meta,
            label,
            children,
            icon: iconCls
        }
        if( path.indexOf('main') !== -1 ) { // 判断是否为一级菜单,我这里一级菜单为home组件
            keys['component'] = ()=>import('@/views/Home.vue')
        } else {
            // 通过路径获取到组件信息
            keys['component'] = viewsComponents[`/src/views/plateform${path}.vue`]
        }
        newMenuList.push(keys)
    })
    return newMenuList
}

 3.将格式化后的权限菜单,利用router实例对象的addRoute方法动态添加路由,在动态添加路由的同时,使用store保存权限菜单,用于在主页面菜单列表遍历动态显示。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值