vue权限管理——请求和响应权限控制

1.请求头中设置token

每次请求请求头都携带token,没有token或者token失效后端会返回错误

javascript 复制代码
axios.interceptors.request.use(configs => {
    let token = sessionStorage.getItem("token");
    if (token) {
        configs.headers.authorization = token;
    }
}

2.拒绝非权限请求

防止一些在浏览器上强制将按钮改成可用(如将disabled改为true就可用),然后发起请求后发送后端

javascript 复制代码
const actionMapping = {
    'get': 'view',
    'post': 'add',
    'put': 'edit',
    'delete': 'delete',
}
const whiteList = ['/login','/user/login','/user/me', '/', '/404']

// 对请求头进行处理(token)
axios.interceptors.request.use(configs => {
    let token = sessionStorage.getItem("token");
    if (token) {
        configs.headers.authorization = token;
    }

    // 拒绝非权限请求
    if (!whiteList.includes(configs.url)) {
        let metaRights = router.currentRoute.value.meta.rights;
        let action = actionMapping[configs.method];

        if (!metaRights.includes(action)) {
            ElMessage.error("没有操作权限");
            return Promise.reject(new Error('没有操作权限'))
        }
    }

    return configs;
});

3.响应拦截

响应控制:请求返回401,token无效或者后期,则需要跳转到登录界面

javascript 复制代码
// 处理返回数据
axios.interceptors.response.use(response => {
    return response;
}, error => {
    let { status, data } = error.response;
    let { message, errorDetail } = error.response.data;
....
   if (status === 401 || status === 402 || status === 403) {
        // 没有权限,需要重新登录
        ElMessage.error("token失效或无权限,正跳转登录页面......");
        sessionStorage.clear();
        return router.push("/login");
    }
....
}
相关推荐
谁点的猪脚饭2 分钟前
vue2 element-ui 中 el-radio 单选框点击事件失效问题
vue.js·elementui·vue2
苹果酱056743 分钟前
redis系列--1.redis是什么
java·vue.js·spring boot·mysql·课程设计
琦遇2 小时前
Vue3使用AntvG6写拓扑图,可添加修改删除节点和边
前端·javascript·vue.js
南囝coding2 小时前
做Docx预览,一定要做这个神库!!
前端·vue.js·面试
樊小肆2 小时前
Vue3 在线 PDF 编辑 1.0 保存、下载
前端·vue.js
樊小肆2 小时前
Vue3 在线 PDF 编辑 1.0 文字、圆、矩形批注
前端·vue.js
李大2 小时前
uniapp怎么进行代码混淆
前端·javascript·vue.js
柚子8162 小时前
用transform给vue加点功能
前端·vue.js·vite
wordbaby3 小时前
Vue 图片重试指令 (v-img-retry) 增强:集成 visibility 控制,实现无缝加载过渡
前端·vue.js·http
ZhZhXuan3 小时前
micro-app环境下,子系统加载vxe-table样式被吞解决方法
vue.js