当前位置:网站首页 > 压力管理与职场平衡 > 正文

rbac权限管理(rbac权限管理 前端动态展示菜单)



权限控制,最常见的基本上有 2 种

  • 基于 的权限控制
  • 基于 的权限控制

这个两种到底有什么不同呢?

我们通过下图来分析一下

d1bb202f09813423dea6462d47fed198.png
image-.png

是基于 用户 -> 权限,直接为每个用户分配权限

基于 用户 -> 角色 -> 权限,以角色为媒介,来为每个用户分配权限

这样做的好处是,某个权限过于敏感时,想要将每个用户或者部分用户的权限去掉,就不需要每个用户的权限都操作一遍,只需要删除对应角色的权限即可

那在实际的开发中 是最常用的权限控制方案,就前端而言, 主要如何实现的呢?

主要就两个部分

  • 页面权限受控
  • 按钮权限受控

下面我们就来实现这两个部分

  • 页面权限
  • 按钮权限

页面的访问,我们都是需要配置路由表的,根据配置路由表的路径来访问页面

那么,我们控制了路由表,不就能控制页面的访问了吗?

实现思路

  • 前端根据不同用户信息,从后端获取该用户所拥有权限的路由表
  • 前端动态创建路由表

基本环境

5f606aca8d7330f1543443dc9511f7d6.png
image-.png

创建项目

a29a03fc77af2b820f28ebbf4c9e2ef0.png
image-.png

打开项目, 运行一下

c51a76d3b5a259ce182a23628c341d89.png
image-.png

代码初始化,删除不必要的一些文件

b69d23b2974cdb2206bb4bd85882c7a8.png
image-.png

我们创建几个新文件夹

96e1792efe4fd7a615fe1a45f2b4712c.png
image-.png

写下基本的页面

a5317695e2d5b291f7be351db0a8ffac.png
image-.png

写下路由配置

95f6ac2343b63833be4f8a507db1ec53.png
image-.png

主要为了存放一些公共路由,没有权限页可以访问,比如登录页、404页面这些

因为是用 编写的,我们需要加一下声明文件,定义下 的类型

c01c0fa1a335744c1e7b53ef2384885c.png
image-.png

接下来编写,创建路由、导出路由

在 中导入下

接下来写下 Layout 架构

我们要实现的效果,是一个后台管理页面的侧边栏,点击菜单右边就能跳转到对应路由所在页面

ac7cfd428a6fa3473cecbe133ea94225.png
image-.png

创建

右边路由跳转页

侧边栏

作为 layout 架构的统一出口

3b7175c9de217bf9b30717e0234525d0.png
image-.png

上面是一种动态路由的固定写法,需要与的路由配置进行对应

其中最主要的就是 中的 ,这是为确定路由跳转对应页面的标识,没这个就跳不了

有一个小知识点

  • 拿到的地址是包括 和 在内的完整地址。该字符串是经过百分号编码的
  • 经过百分号编码的 URL 中的 段

为了实现右边侧边栏,需要引入 来快速搭建

改造一下,完整引入

我们来编写下 侧边栏

统一导出 layout 架构,加一点小样式

运行一下

dc2c3b8fb92c8c9c736e2c1747ba7c2f.png
image-.png

通常我们实现页面权限管理,比较常见的方案是,有权限的路由信息由后端传给前端,前端再根据路由信息进行渲染

我们先安装下 模拟下后端传过来的数据

de89d805b825b9662a6b042040478071.png
image-.png

好了,我们把模拟的路由数据,加到本地路由中

a22df131142fbc3d6cb7c889fcb2b6ab.png
image-.png
da5cdcf1760c91e5fdf52947a984b64d.png
image-.png
1ea2dab590cdf29726b1ab6cc8c37efa.png
image-.png

报错了,为什么呢?

对比路由表的数据,原来,组件模块的数据与公共路由的数据不一致

6af93ff806046359cd415b3c7d619d48.png
image-.png

我们需要把模拟后端传过来的数据处理一下

7bd661ffc9eddfadfc16aa426f4b7e8b.png
image-.png

再修改下

引入一下

可以正常访问了

d868b97124c2b7e73e66cca96f97e764.png
image-.png

除了页面权限,外我们还有按钮权限

可以通过自定义指令来完成, 中定义一下

ff721b97edc400fe84737515a4d05c51.png
image-.png

需要挂载到

还是在 那里加一下模拟数据

加入几个按钮,使用自定义指令

这个权限没有配置,无法显示

15cee65bd629f6b959dd4ecbad11f7de.png
image-.png

加一下权限

1696a7a9351c4d5dd2fd9bb2a81cfd3a.png
image-.png
05742ca591b7a255d869b92e3dd9c607.png
image-.png

用户权限我们使用 自定义指令,其原理是通过删除当前元素,来实现隐藏

如果使用 的标签页呢

我们在 src/views/home.vue 写一下基本样式

0b0bfd1adf3d32b669d28505b6305b4d.png
image-.png

我们加下按钮权限控制

bf2ee3ae26ed5462c28aff93d1ec8978.png
image-.png

因为这个权限我们没有配置,标签页内容隐藏了,这没问题

但是,标签没隐藏啊,通常要是标签一没权限,应该是标签项、和标签内容都隐藏才对

为什么会这样呢?

我们在 自定义指令中,打印下获取到的元素

4069d10afbcc8da774de7299520a0c15.pngcf226d60dca3db7b701895686048b990.png

id 为 、 元素对应位置在哪里,我们找一下 需要先把指令去掉,因为元素都被我们删除的话,我们看不到具体DOM结构

73368eef3f51a58d6375a539731fea4f.png3cf6ef5e51d156d77cb4404c817f8997.pngee782ea0e81fdf3e0973e9adec68d357.png

对比一下,明显可以看出 自定义指令获取到只是标签内容的元素

那怎么办?

解决办法一:根据当前元素,一层层找到标签项,然后删除,这样是可以。但是这样太麻烦了,也只能用于标签页,那要是其他组件有这样的问题咋办

解决办法二:我们写一个函数判断权限是否存在,再通过 进行隐藏

bf1902c48395af4fa9704b4836ad0a5c.png
image-.png

src/views/home.vue,引入下

ede1d757170b48600b45bce314f06708.png
image-.png

页面权限

不同用户,具有不同页面访问权限,对应权限的路由信息由后端返回。本地路由 + 后端传过来的路由 = 菜单路由

按钮权限

根据不同用户,后端传过来每个按钮的按钮权限字符串,前端根据自定义指令,判断该按钮权限字符串是否存在 从而显示或者隐藏

扩展

一些特殊情况下,自定义指令隐藏无法满足我们想要的效果,我们可以定义一个公共函数检测权限是否存在,再通过 进行隐藏

Node 社群

到此这篇rbac权限管理(rbac权限管理 前端动态展示菜单)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

  • 上一篇: rbac权限系统设计(rbac权限管理实现)
  • 下一篇: 没有了
  • 版权声明


    相关文章:

  • rbac权限系统设计(rbac权限管理实现)2025-07-12 23:45:06
  • oracle 课程(oracle课程设计仓库管理系统)2025-07-12 23:45:06
  • gridbagconstraints布局(gridbaglayout布局管理器的用法)2025-07-12 23:45:06
  • 服务器压力测试平台(服务器压力测试软件)2025-07-12 23:45:06
  • 动态库和静态库参与编译时的区别(动态库和静态库的使用)2025-07-12 23:45:06
  • 制作软件的程序(制作软件程序,没有参与内容下载内容传播)2025-07-12 23:45:06
  • kvm虚拟化管理系统(kvm虚拟化架构)2025-07-12 23:45:06
  • 服务器压力测试软件(服务器压力测试报告)2025-07-12 23:45:06
  • 动态库和静态库参与编译时的区别(动态库和静态库参与编译时的区别是)2025-07-12 23:45:06
  • 服务器压力测试网站有哪些(服务器压力测试软件)2025-07-12 23:45:06
  • 全屏图片