持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
RBAC权限设计思想
背景
为了达成不同的帐号登陆系统后能看到不同的页面,能执行不同的功能
的目标,我们有很多种解决方案,RBAC(Role-Based Access control)权限模型 ,也就是基于角色的权限分配解决方案
一个人可以有不同的角色,每个角色有不同的功能
三个主体
用户: 使用系统的人(员工)
权限点:这个系统中有多少个功能(例始:有3个页面,每个页面上各自有3,2,4个不同的操作)
角色:不同的权限点的集合(用户和角色是**1对多
**的关系:一个用户可以拥有多个角色,这样他就会具体这多个角色的权限了。比如公司的董事长可以拥有财务主管和保安队长的角色: 董事长可以看财务报表,也可以查看监控)
如何给用户添加功能
给用户分配角色,给角色分配权限点
系统中的权限点可以随意添加吗?
不能。必须是程序员已经开发出来的功能!!
为什么要给角色分配权限
用户是什么角色(职位),他就具备某些功能
员工到底能做什么事,还是由角色中携带的具体的功能来定的。
理解权限
权限: 在系统中是否具备做某个操作的权力。
权限分成两个级别:
- 页面级: 是否有权限访问某个菜单(例如:是否可以在左侧菜单中看到 员工管理 这个菜单)
- 按钮级:是否有权限操作页面上的某个按钮功能(例如:同样是人事部的用户,并不是所有人都可以看到 导入excel 这个按钮,我们可以定制这个按钮能被哪些用户使用
动态路由需要注意的几点
一套完整的方案,会有以下几个方面你需要考虑的:
- 1)切换用户后,权限发生变化,注册的路由也应该要变化,理想情况是删除已注册的动态路由,然后才重新追加新路由。
- 2)刷新页面时,如果用户鉴权还通过,那么其权限所允许的页面应该还能继续访问
- 3)登出系统,即用户退出,需要清除已注册路由
生成动态路由整体分体
分析
登录成功(页面跳转),进入导航守卫:
- 获取个人权限信息
- 生成可以访问的动态路由
- ddRoutes()动态注册路由
- 静态路由和动态路由合并
实例:
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里没有追加的路由