浅谈权限设计思想

92 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

RBAC权限设计思想

背景

为了达成不同的帐号登陆系统后能看到不同的页面,能执行不同的功能的目标,我们有很多种解决方案,RBAC(Role-Based Access control)权限模型 ,也就是基于角色的权限分配解决方案

一个人可以有不同的角色,每个角色有不同的功能

三个主体

用户: 使用系统的人(员工)

权限点:这个系统中有多少个功能(例始:有3个页面,每个页面上各自有3,2,4个不同的操作)

角色:不同的权限点的集合(用户和角色是**1对多**的关系:一个用户可以拥有多个角色,这样他就会具体这多个角色的权限了。比如公司的董事长可以拥有财务主管和保安队长的角色: 董事长可以看财务报表,也可以查看监控)

如何给用户添加功能

给用户分配角色,给角色分配权限点

系统中的权限点可以随意添加吗?

不能。必须是程序员已经开发出来的功能!!

为什么要给角色分配权限

用户是什么角色(职位),他就具备某些功能

员工到底能做什么事,还是由角色中携带的具体的功能来定的。

理解权限

权限: 在系统中是否具备做某个操作的权力。

image.png

权限分成两个级别:

  1. 页面级: 是否有权限访问某个菜单(例如:是否可以在左侧菜单中看到 员工管理 这个菜单)
  2. 按钮级:是否有权限操作页面上的某个按钮功能(例如:同样是人事部的用户,并不是所有人都可以看到 导入excel 这个按钮,我们可以定制这个按钮能被哪些用户使用

动态路由需要注意的几点

一套完整的方案,会有以下几个方面你需要考虑的:

  • 1)切换用户后,权限发生变化,注册的路由也应该要变化,理想情况是删除已注册的动态路由,然后才重新追加新路由。
  • 2)刷新页面时,如果用户鉴权还通过,那么其权限所允许的页面应该还能继续访问
  • 3)登出系统,即用户退出,需要清除已注册路由

生成动态路由整体分体

分析

登录成功(页面跳转),进入导航守卫:

  • 获取个人权限信息
  • 生成可以访问的动态路由
  • ddRoutes()动态注册路由
  • 静态路由和动态路由合并

image.png

实例:

image.png

addRoutes方法

介绍

1、addRoutes函数是用来追加路由注册的。其接受一个参数,是个路由配置的数组,当用户登录到系统后,就根据用户的权限来追加注册TA能访问的路由

2、$router.options.routes的内容只会是在创建实例时生成,后面追加的不会出现在这里

我们在控制台上打印路由实例router,可以看到其下有个options属性,里面有个routes属性。这个就是我们创建路由实例时的routes选项内容。我们以为通过addRoutes动态注册路由后,新注册的内容也会出现在这个属性里,但结果却是没有。

addRoutes基本使用

this.$router.addRoutes([路由配置对象])

示例:

// 按钮
<button @click="hAddRoute">addRoute</button>
​
// 回调  
hAddRoute() {
    this.$router.addRoutes([{     //点击按钮时动态生成路由规则
        path: '/abc',
        component: () => import('@/views/abc'),
        }])
      this.$router.push('/abc')  // 然后跳转
}
这个路由是动态生成的,当点击按钮时,生成路由,并跳转,它不是创建实例时生成的,所以$router.options.routes里没有追加的路由