前端权限——页面权限

1,919 阅读2分钟

页面权限是对用户角色的校验

应用场景

需要通过用户角色来评定某些页面是否被展示时
111.jpeg 同一系统,财务登录只能看看财务报表的页面,仓库的只能打开出入库页面

实现思路

当用户登录成功之后,通过接口返回值得知用户信息和可访问页面列表.只需要按照用户的权限列表给他相应的访问权限从而达到目的.

具体实现

登录成功之后,得到如下数据

{ 
    user_id:001,
    user_name:"张豆豆",
    user_permission:["List","Detail","Manage"] 
 }

通过接口的返回值可知,张豆豆能访问listdetail以及manage页面,

将路由分为静态路由及动态路由

静态路由:所有角色都能访问,主要区分登录访问和非登录访问.(tip:处理的逻辑见上文,前端权限——登陆权限
动态路由:根据角色定制的页面,主要区分不同角色。

    //静态路由
    export const routes = [
      {
         path: '/login', //登录页面
         name: 'Login',
         component: Login,
      },
      {
         path:"/myCenter", // 个人中心
         name:"MyCenter",
         component: MyCenter, 
         meta:{
            need_login:true //需要登录
         }
      },
      {
         path:"/", // 首页
         name:"Home",
         component: Home, 
      }
    ]
    
    //动态路由
    export const dynamic_routes = [
       {
           path:"/list", // 列表页
           name:"List",
           component: List
       },
       {
           path:"/detail", // 详情页
           name:"Detail",
           component: Detail
       },
       {
           path:"/manage", // 内容管理页
           name:"Manage",
           component: Manage
       },
       {
           path:"/admin", // 人员管理页
           name:"Admin",
           component: Admin
       }
    ]  

用户登录成功后,动态添加路由信息

一般会将登录成功后将接口信息存到vuexlocalStorage里面..

import store from "@/store";

export const routes = [...略,格式如上]; //所有静态路由

export const dynamic_routes = [...略,格式如上]; //所有动态路由

//创建路由对象
const router = createRouter({ 
  history: createWebHashHistory(),//带#号的路由
  routes,
});

//动态添加路由
if(store.state.user != null){ //用户已经登录
    //从vuex中拿到用户权限信息
    const { user_permission } = store.state.user; // 从用户信息中获取权限列表
    const allow_routes = dynamic_routes.filter((route)=>//过滤该用户允许访问的路由信息
    { 
        return user_permission.includes(route.name); 
    })
    allow_routes.forEach((route)=>{ //将允许访问的路由动态添加到路由栈中
        router.addRoute(route);
    })
}
export default router;

在动态添加路由的过程中,如果有 404 页面,一定要放在最后添加,否则在登陆的时候添加完页面会重定向到 404 页面。 ok~~ 关于页面权限大致就是这个思路,代码逻辑也大致如此,具体用户信息存在那儿,怎么获取用户信息,路由配置还需要有什么其他的配置项,根据实际项目修改补充即可!

知识点

router.addRoute

vue-router 4 提供的的api,每一次只能添加一个路由信息,所以要将allow_routes遍历循环添加.
router.addRoute另一种用法——添加嵌套子路由
接受两个参数,第一个参数对应父路由的name属性,第二个参数是要添加的子路由信息.如下: image.png

createRouter

上面代码采用的是hash模式 image.png

参考文章:juejin.cn/post/694945…