RBAC权限设计思想的理解以及使用

RBAC是什么?

RBAC模型概述
RBAC模型(Role-Based Access Control:基于角色的访问控制)模型是20世纪90年代研究出来的一种新模型,但其实在20世纪70年代的多用户计算时期,这种思想就已经被提出来,直到20世纪90年代中后期,RBAC才在研究团体中得到一些重视,并先后提出了许多类型的RBAC模型。其中以美国George Mason大学信息安全技术实验室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公认。

RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为What、How的问题,Who、What、How构成了访问权限三元组,具体的理论可以参考RBAC96的论文,这里我们就不做详细的展开介绍,大家有个印象即可。

2、RBAC的组成
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。

RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理

下面在讲解之前,先介绍一些名词:

User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
Role(角色):不同角色具有不同的权限
Permission(权限):访问权限
用户-角色映射:用户和角色之间的映射关系
角色-权限映射:角色和权限之间的映射
关系图:
在这里插入图片描述
转载自:《RBAC权限系统分析、设计与实现》 | shuwoom.com

如何在在后台管理项目中实现?

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

  • 图解分析:
    在这里插入图片描述
    也就是说,我们赋予一个角色什么样的权限,最后让谁(用户)来扮演这个角色,继承这些权限

可能有人会问,那我们为什么不直接而把相应的权限赋值给用户?
因为会导致整个权限分配和等级划分的混乱,比方我今天看你表现的好,我给你赋予了某些特殊的权限,那可能不止你一个这样,那如果表现的不好,我就要撤销你的权限,往复如此,就会显得很乱,容易出错,条理都不明确,那RBAC的好处这样就可以体现出来了,例如我设置了一个员工的角色,他的权限是只能查看工资,其他的功能都无权访问,但是后面他表现出色,公司决定让他晋升为人事经理了,而人事经理和普通员工的权限就不一样,他能删除员工,查看工资,能对员工进行管理,以及审批等等一些列权限操作,那么我们只需要相对应的,让他从员工角色替换为人事经理就可以了,整个流程等级的划分和各个级别之间的权限都会更加明确,简单明了

在这里插入图片描述
项目中在登录时就该获取到不同用户可以访问的页面级按钮级的权限点,对应权限点来筛选可以访问的页面以及可以使用的按钮功能

首先讲一下,怎么实现页面级权限的控制吧

  1. 在用户登录时获取用户的权限点,前提,你要配置好页面的标识,用来区分,我这里返回的标识名字,是我配置不同页面路由时填写的name,然后分配权限给角色
    在这里插入图片描述
  2. 根据权限点筛选出路由页面,核心点 router.addRoutes(),动态添加路由
    语法:
router.addRoutes([路由配置对象])
或者:
this.$router.addRoutes([路由配置对象])

2.1 步骤: 在路由守卫beforeEach中,在用户能从登录页跳转进入时,我们就要在这里筛选出当前用户能够访问的路由对象
在这里插入图片描述
具体步骤是,获取到用户的详细的信息和已有的页面路由进行filter过滤,值得注意的一点是,通过addRoutes动态添加的路由对象,在router对象中是找不到的,那这里的问题就是,我们无法根据路由对象来渲染菜单选项,所以我们要通过保存到vuex中,来使用它
在这里插入图片描述

在这里插入图片描述
2.2 state.menuList中合并了静态和动态路由,决定了用户最终能够访问的页面
在这里插入图片描述
2.3 在渲染左侧菜单的页面中,更改渲染的来源,实现根据用户页面级权限点不同,显示不同的路由菜单
在这里插入图片描述

在这里插入图片描述

实现按钮级权限控制
核心: 自定义指令
语法:

Vue.directive('指令名称',配置对象)
Vue.directive('allow',{
  inserted(el,binding){
    ....
}
})
el是当前使用指令的dom元素,binding对象中有许多信息,其中的value能获取到绑定指令时指令的绑定值

在这里插入图片描述

实现步骤:

  1. 全局定义一个自定义指令
  2. 选择给按钮使用自定义指令,并绑定值
    在这里插入图片描述
  3. 在自定义指令中的inserted函数中,获取到用户的权限点,用于控制按钮的显示和隐藏
    在这里插入图片描述
    注: points中是用户的权限点信息
    在这里插入图片描述
    如果用户权限点中包含了我们绑定的值(includes)则返回true,也就是可以使用按钮功能,什么也不做直接return,反之删除按钮,不让其看见,无法使用
    例子:
    我当前用户的按钮权限点只有导出Excel功能,导入和分配角色以及删除员工的功能都无法看见
    在这里插入图片描述

如果对你有所帮助的话,麻烦点个赞吧!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RBAC权限管理设计是一种通过对不同的用户分配拥有不同权限点的操作来实现权限管理的方法。系统中的权限点必须是程序员已经开发出来的功能,不能随意添加。角色的权限点可以根据实际情况由系统管理员进行添加和删除。用户和角色是一对多的关系,一个用户可以拥有多个角色,从而具备多个角色的权限RBAC权限管理设计包括动态添加路由配置、RBAC组成、RBAC支持的安全原则以及RBAC的优缺点。动态添加路由配置是为了实现根据用户的权限动态生成左侧菜单。RBAC支持的安全原则包括最小权限原则、责任分离原则和数据抽象原则。最小权限原则指的是将角色配置成完成任务所需的最小权限集合,责任分离原则可以通过调用相互独立互斥的角色来共同完成敏感的任务,数据抽象原则可以通过权限的抽象来体现。RBAC的优点包括灵活性高、易于管理和维护,而缺点则包括复杂性高和实施难度大。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [后台系统中RBAC权限设计(详)](https://blog.csdn.net/weixin_58384302/article/details/121087320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [RBAC权限管理设计](https://blog.csdn.net/weixin_47274607/article/details/121142338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值