vue动态菜单,根据登录用户权限返回不同菜单,登录完成跳转到不同的首页

1、动态菜单,前提是根据后端返回的不同菜单,展示给不同的人,路由一定要和菜单返回的URL保持一致,
2、前提是,路由中不要写死redirect到某一个指定 文件,因为登录的用户不一定有这个权限
3、流程
(1)路由配法
新建一个位于view文件夹下的index.vue用来进行路由分发

路由文件中新建一个路由,当 / 时重定向到 /root ,/root即引用的上面创建的index.vue文件

(2)index.vue文件做路由分发
getloginlist()方法为获取登录用户有权限的菜单,返回的菜单this.routerList 中如果 this.$route.path==/或者是当前要跳转的路由对象在返回的的菜单中没有,就强制跳转到有权限的菜单的第一个children的第一个对象的url(注:默认只有两级菜单,一级只做展示,二级菜单才对应路由)3)登录成功后不要跳转到/index页面,要跳转到 / 重定向的页面在进行路由分发


这样就可以根据不一样权限菜单,登录是默认显示有权限的页面了

转发:https://blog.csdn.net/weixin_44265726/article/details/121948799






  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现用户登录角色鉴权可以分为以下几个步骤: 1. 创建路由配置文件 在路由配置文件中定义不同的路由,每个路由对应一种权限。例如,管理员可以访问所有的路由,而普通用户只能访问部分路由。 ``` import Vue from 'vue' import Router from 'vue-router' import Admin from '@/views/Admin' import User from '@/views/User' import Login from '@/views/Login' Vue.use(Router) export default new Router({ routes: [ { path: '/admin', name: 'Admin', component: Admin, meta: { requiresAuth: true, roles: ['admin'] } }, { path: '/user', name: 'User', component: User, meta: { requiresAuth: true, roles: ['admin', 'user'] } }, { path: '/', name: 'Login', component: Login } ] }) ``` 2. 创建登录页 在登录页中,用户输入用户名和密码后,将其发送至后端进行验证。验证通过后,后端返回一个包含用户信息和token的响应结果。前端可以将token存储在localStorage或sessionStorage中,以便在后续的请求中携带token。 3. 创建路由守卫 路由守卫可以用来检测用户是否有权限访问某个路由。在路由守卫中,可以检查localStorage或sessionStorage中是否存在token。如果不存在,则跳转登录页;如果存在,则从token中解析出用户信息,并检查用户是否有权限访问该路由。如果有权限,则继续访问该路由;如果没有权限,则跳转到没有权限的提示页面。 ``` import router from './router' // 路由守卫 router.beforeEach((to, from, next) => { // 判断该路由是否需要登录权限 if (to.meta.requiresAuth) { // 从localStorage中获取token const token = window.localStorage.getItem('token') if (token) { // 解析token,获取用户信息 const payload = JSON.parse(atob(token.split('.')[1])) // 检查用户是否有权限访问该路由 if (to.meta.roles.includes(payload.role)) { next() } else { next('/unauthorized') } } else { next('/login') } } else { next() } }) ``` 4. 根据用户角色展示不同菜单 在应用的导航栏或侧边栏中,根据用户角色动态地展示不同菜单。可以通过computed属性计算出当前用户有权限访问的菜单,并将其渲染到视图中。 ``` <template> <div> <ul> <li v-if="showAdminMenu"><router-link to="/admin">管理页面</router-link></li> <li v-if="showUserMenu"><router-link to="/user">用户页面</router-link></li> </ul> </div> </template> <script> export default { computed: { showAdminMenu() { const token = window.localStorage.getItem('token') if (token) { const payload = JSON.parse(atob(token.split('.')[1])) return payload.role === 'admin' } else { return false } }, showUserMenu() { const token = window.localStorage.getItem('token') if (token) { const payload = JSON.parse(atob(token.split('.')[1])) return ['admin', 'user'].includes(payload.role) } else { return false } } } } </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值