vue3用户权限管理(导航栏权限控制)2

上一节我们说到,通过后端的用户权限来进行路由的动态添加,实现权限控制,这一节我们通过递归导航栏组件,实现后台权限控制导航栏,接上一节所说我们在vuex中存储了一个路由数组["/","*"]进行权限控制,这一节还是要使用这个路由数组进行导航栏的控制,开始吧。

1,下载安装element-plus

        

2,在main.ts里导入

 

3.使用element-plus的导航栏组件

         这里要注意下,导航栏的代码都要抽离出来单独进行处理

4.创建一个导航栏组件,将导航栏组件抽取出来

    在views里新建一个导航栏组件,取名NavList.vue,将我们的导航栏组件拿出来

    

 在navList组件里写如下代码,进行递归

<template>
    <div>
        <el-sub-menu v-if="menu.children" :index="menu.path"> //3,判断传入的路由表中是否有子路由
            <template #title>{{menu.name}}</template> 
            <Nav-list v-for="(item,index) in menu.children" :key="index" :menu="item"></Nav-list> //5.这里是判断,如果有子路由,也就是有二级导航
            //时,直接调用自身递归,在次循环二级导航,看是否有三级路由或者时有没有其他的内容,在把二级导航的内容通过menu传入到组件再次进行循环拆分,知道最后一层
        </el-sub-menu>
        <el-menu-item v-else :index="menu.path"> //4.如果没有子路由,就代表着没有下级导航,就直接渲染即可,
            <span >{{menu.name}}</span>
        </el-menu-item>
    </div>
</template>
<script lang="ts">
import {defineComponent} from "vue"
    export default defineComponent({
        name:"NavList",//给组件定义好name方便自己调用自己
        props:{
            menu:Object,//1.获取在父组件中传入的路由信息
        },
        setup(props) {
            const {menu}:any= props
            return {
                menu//2.导出供页面渲染递归
            }
        
        },
        components:{

        }
    })
</script>

最后我们将这个组件导入到我们的主页组件里 nav.vue

 

<template>
    <div>
        <el-row>
            <el-col :span="12">
                <el-menu :router="true"> //3.导航栏组件都需要写el-menu
                     
                    <Nav-list v-for="(item,index) in nav" :key="index" :menu="item"></Nav-list>//4.将我们筛选过的动态路由数据,通过循环组件,然后把每一项都传递进去,给组件筛选递归
                </el-menu>
            </el-col>
        </el-row>
        <el-button>头部</el-button>
        <router-view></router-view>
        <el-button>尾部</el-button>
    </div>
</template>
<script lang="ts">
import nav from "./nav"  //1.获取筛选过的路由表,这里我就简写一下了,一般就是我们通过后端传入的["/","*"]对动态路由筛选过后的新的动态路由,和上一节路由权限控制,通过addrouter导入的内容一致
import NavList from "./NavList.vue"  //2.导入我们封装的递归导航组件

import {defineComponent} from "vue"
    export default defineComponent({
        setup() {
            return {
                nav
            }
        
        },
        components:{
            NavList
        }
    })
</script>
<script scoped>
</script>

这样即可以实现,动态控制导航栏,从,登录--获取token---token存本地存储---vuex调用本地存储的token---在vuex里通过token获取到路由数组---在将获取到的路由数组存放在state里----在主页里获取我们定义好的动态路由----将获取到的路由数组和动态路由做筛选,选出符合数组里的路由---将处理好的路由循环到我们的路由递归组件里。这样就实现了通过后端的权限来控制导航栏.

动态路由信息

export default [
    {
        name:"首页",
        path:"/home"
    },
    {
        name:"人员管理",
        Path:"/personnel",
        children:[
            {
                name:"人员列表",
                url:"/personnel/list"
            }
        ]
    }
]

nav.vue 主页面组件,引入navlist.vue递归组件。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue中进行路由的权限控制可以通过以下步骤进行实现: 1. 定义路由:在路由定义时,为每个需要进行权限控制的路由添加一个meta字段,用于存储该路由所需的权限信息。例如:{ path: '/admin', name: 'admin', component: Admin, meta: { requiresAuth: true } },表示需要管理员权限才能访问该路由。 2. 创建路由导航守卫:在Vue中,可以使用全局前置守卫(router.beforeEach)来进行路由的权限控制。在全局前置守卫中,可以获取到当前路由的meta信息,并根据用户权限进行判断。 3. 判断用户权限:在全局前置守卫中,判断当前路由是否需要进行权限控制,若需要,则判断用户是否具有该权限。可以通过获取用户的角色或权限列表来进行判断,例如从后端API获取用户权限列表。 4. 路由拦截:根据用户权限判断结果,决定是否允许用户访问该路由。若用户没有权限访问该路由,则可以进行路由拦截,跳转至其他页面或显示权限不足的提示信息。 5. 注册路由守卫:将前述的全局前置守卫注册到Vue的路由实例中,以便在每次路由切换时进行权限控制。 通过上述步骤,就可以在Vue中实现简单的路由权限控制。请注意,此方法只是一种简单的权限控制方式,对于复杂的权限要求或需要更高级的权限控制算法,可能需要结合实际业务需求进行进一步的扩展和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香蕉麻花皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值