RBAC权限管理概念

基于RBAC模型的权限设计:如何设计系统权限体系? | 人人都是产品经理

一,什么是RBAC

RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念。取消了用户和权限的直接关联,改为通过用户关联角色、角色关联权限的方法来间接地赋予用户权限(如下图),从而达到用户和权限解耦的目的。

 RBAC的好处

  1. 职能划分更谨慎。对于角色的权限调整不仅仅只影响单个用户,而是会影响关联此角色的所有用户,管理员下发/回收权限会更为谨慎;
  2. 便于权限管理。对于批量的用户权限调整,只需调整用户关联的角色权限即可,无需对每一个用户都进行权限调整,既大幅提升权限调整的效率,又降低漏调权限的概率;

在不断的发展过程中,RBAC也因不同的需求而演化出了不同的版本,目前主要有以下几个版本:

1.RBAC0,这是RBAC的初始形态,也是最原始、最简单的RBAC版本;
2.RBAC1,基于RBAC0的优化,增加了角色的分层(即: 子角色),子角色可以继承父角色的所有权限;

3.RBAC2,基于RBAC0的另一种优化,增加了对角色的一些限制: 角色互斥、角色容量等;

4.RBAC3,最复杂也是最全面的RBAC模型,它在RBAC0的基础上,将RBAC1和RBAC2中的优化部分进行了整合;

RBAC1:

RBAC2:


 

RBAC3: 

二、权限管理 

一套后台管理系统中基础与核心的板块主要包括: RBAC权限管理模块

RBAC (Role-Based Access Control) : 基于角色的访问控制

系统中包含了用户、角色、权限三个部分,是不是能够不要有“角色”环节? 是可以的,但是不合适

首先需要有一个用户的概念,用户对应的是角色:

  • 一个用户可以拥有多个角色 (用户1: 角色N) ,表现形式就是checkbox
  • 一个角色可以分配给多个用户 (角色1: 用户N) ,表现形式就是checkbox
  • 用户与角色之间的最终对应关系应该是N: N也就是多对多的关系

角色能够做的事情是什么? 角色想对什么东西进行控制? 控制的是什么内容?(角色主要想控制“资源”)

在对角色进行权限分配的时候,出现了一个tree组件,也就是树形菜单,而这个树形菜单中的内容是什么呢?

1. 资源的内容其实主要包括: 菜单(不同的用户看到的菜单就是不一样的) 、按钮(不同的用户在同一个页面中拥有的按钮操作权限也是不一样的)、数据(当前项目没有做)

2. 资源对应于当前项目中,其实就是对应于已经开发的功能版块(菜单)和版块中对应的操作按钮

3. 资源: 已经开发的资源(权限管理、商品管理) 和未开发的资源(订单、客户、优惠券、学生...)

  • 对于已经开发的资源可以进行资源的分配,包括菜单、按钮功能的分配,然后让用户拥有这个角色以后,这样的话角色就拥有了这些资源的操作权限
  • 对于未开发的资源,如果进行了开发的操作,包括路由的创建、页面的构建、公共组件的设置...那么用户、角色的操作将会受到完全的影响,因为需要给角色和用户进行重新的权限分配操作,而这些角色将重新分配到不同的权限资源。

权限管理主要划分成:

  • 菜单级 (所有项目都应用到了,100%)
  • 按钮级 (还有一部分项目没有应用到)
  • 数据级 (暂时处理不了,实际项目中,如果是中小型项目,应用面也很少)

三、权限管理操作的过程 

如果进行登录操作,涉及的是用户、角色、权限三者当中的哪部分工作?

当进行用户登录操作的时候,后端往往会返回前端什么样的数据内容?因为后端需要明确的是该用户拥有什么样的角色,能够进行哪些的权限操作。

  • login用户进行登录的时候,后端将返回token令牌,明确用户是可以进行后台操作的,但是没有告诉你,你能操作的是什么。
  • info用户信息获取的操作是在login登录以后处理的,因为得先获取到token的令牌,然后呢,需要明确info返回的数据有哪些?
  1.  roles: 角色的意思,一个用户可以拥有N个角色,所以它是数组类型
  2. routes: 路由的概念,但是给角色设置权限利用的是tree组件,而tree组件中包含的是checkbox复选,说明产生的选中内容是多个,因此会形成数组的结果值,那么这些值将会对应到routes数组当中。现在的routes虽然也是数组,单词仍旧是路由的意思,但是它和实现路由跳转的router中的routes是不一样的。因为实现跳转的routes中包含有name、 path、component、meta等内容,而现在的routes仅仅是一些字符串。
  •      后端返回的routes字符串数组: 目的是利用这个数组去对比前端定义的router对应的routes路由,明确哪些是可以进行显示操作的。
  •      前端定义的router对应的routes路由: 它主要实现两个功能,一个是菜单的显示,一个是路由的跳转
  1. 3.buttons: 是为了明确指定模块 (页面中的按钮是否能够起作用,按钮级权限控制是直接写在页面的代码中的,所以是“硬编码”模式。所以就决定了buttons数组中的内容是不能随便修改的。

四、强化用户登录的时候routes和buttons数据的功能与算法

路由菜单权限的基础操作

  • 首先routes数组是由谁提供的? 显然是后端提供的。说明的问题是,权限控制需要前端和后台的配合。(因为权限是变化的,不同的用户有不同的角色,不同的角色有不同的权限)
  • 路由表:是谁定义的?谁编写的?是静态的还是动态的?前端定义的,前端编写的。之前我们一直讲的是静态路由。后来讲vue3路由的时候我们强化了addRoute、removeRoute,动态添加、动态删除路由。
  • 基本算法:其实就是两个数组的比较,但是因为前端路由是可以实现嵌套的,这就意味着会存在递归的问题。

按钮权限的基础操作

  • 这个buttons数组是由谁提供的? 显然是后端提供的。说明的问题是,权限控制需要前端和后台的配合。(变化)
  • 页面中的按钮是固定的还是变化的? 是固定的。所以按钮是否可用(是否显示)采用的条件判断是使用“硬编码”模式。
  • 基本算法: 只需要将一个字符串去数组中进行查找判断,buttons.index0f("btn.trademark.add")

五、路由的分类 

src/router/routes.ts是什么文件? 显然它是前端项目路由的配置文件。之前一直强调实现的是静态路由表的配置操作。

路由的分类划分成了:静态路由、动态路由、任意路由

  • 静态路由staticRoutes: 是否所有的用户都可以看到一个页面叫login登录页? 是否所有的用户在输入地址错误以后都会看到一个404出错页? 是否所有用户登录系统以后都会看到一个首页? 是的。(静态路由 =>> 所有人都可以操作的路由,是不变化的路由,因此称为静态路由)
  • 动态路由allAsyncRoutes: 如果商品管理下包含商品分类、品牌管理、属性管理、SPU管理、SKU管理等众多的页面,但是这些页面是否应该交给不同的人员进行操作,也就是说并不是所有人都能够看到这些页面操作这些页面?后续可能还会有订单下面的订单查询,优惠券下面的优惠券清单等类似的模块与页面。那么这些页面的操作是不定人员,是自由分配与动态管理的。所以,这些类似商品管理的内容的菜单和按钮应该是后台后回数据并且动态生成的! (动态路由 =>> 只有指定人员才能查看与跳转的路由)
  • 任意路由anyRoute: 如果用户输入地址错误,一般都会显示一个404页面,而这个页面的路由设置都是在所有路由的最后,它也是固定的,唯一的,也是不变的。(任意路由 =>> 只有一个404页面的路由配置)
// 静态路由(默认路由)
export const staticRoutes: Array<RouteRecordRaw> = [{path: "/login",name: "Login",component: () => import('@/views/login/index.vue'),meta:{hidden: true,}},...
];// 定义动态路由(异步路由)
export const allAsyncRoutes: Array<RouteRecordRaw> = [// 产品模块{path: "/product",name: "Product",component: () => import('@/layout/index.vue'),meta:{title: "商品管理",icon: "ele-ShoppingBag"},children:[]},// 新闻模块// 订单模块// 促销模块// 物流模块...
];// 任意路由
export const anyRoute=/*匹配任意的路由必须最后注册*/{path:"/:pathMatch(.*)",name:"Any",redirect:"/404",meta: {hidden: true,},}

问题: 最终项目里的routes路由请问有几个? 只有1个!!!

最终staticRoutes、allAsyncRoutes、anyRoute需要进行一次整合、拼接,最终合成一个路由数组对象。最后发现staticRoutes、anyRoute都是不变化的,而allAsyncRoutes是可能会随着系统功能的扩展,从而产生变化,所以后续主要操作的就是allAsyncRoutes。 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333622.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尤雨溪:框架挖坑靠文档来补,这算 PUA 用户吗?丨 RTE 开发者日报 Vol.122

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【竞技宝】bb杯:Talon鏖战三局力克Aster晋级

北京时间2024年1月9日,DOTA2别墅杯东南亚/中国区封闭预选赛在昨天进入第二个比赛日,昨日第三场比赛迎来了Talon对阵Aster。本场比赛两队前两局战平,决胜局Talon露娜速推阵容在20分钟出头就终结了比赛,最终Aster不敌Talon惨遭淘汰。以下是本场比赛的详细战报。 第一局: 首局比赛…

Certum与Geotrust的SSL证书区别

Certum和GeoTrust都是知名的CA认证机构&#xff0c;这两个品牌下的SSL证书在多个方面存在一些差异。今天就随SSL盾小编了解Certum与Geotrust证书的区别。 一、Certum机构背景 Certum是波兰的一家CA认证机构&#xff0c;成立于2002年&#xff0c;至今已有近20多年的历史。旗下有…

5.5 THREAD GRANULARITY

性能调优中一个重要的算法决定是线程的粒度。有时&#xff0c;在每个线程中投入更多工作并使用更少的线程是有利的。当线程之间存在一些冗余工作时&#xff0c;就会产生这种优势。在当前一代设备中&#xff0c;每个SM的指令处理带宽有限。每个指令都消耗指令处理带宽&#xff0…

web左侧伸缩菜单栏/导航栏

效果展示&#xff1a; 百度网盘链接下载全部资源&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1ZnKdWxTH49JhqZ7Xd-cJIA?pwd4332 提取码&#xff1a;4332 html/JQuery代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head&g…

浅谈智慧路灯安全智能供电方案设计——安科瑞赵嘉敏

摘要: 智慧路灯&#xff0c;作为智慧城市、新基建、城市更新的主要组成部分&#xff0c;近些年在各大城市已得到很好的落地和 应用&#xff0c;但其与传统路灯相比集成大量异元异构电子设备&#xff0c;这些设备的供电电压、接口形式、权属单位各不相同&#xff0c; 如何设计一…

Python图片格式转换与文字识别:技术与实践

目录 一、引言 二、Python图片格式转换 PIL库介绍 代码示例 质量优化 三、文字识别技术 四、Python实现文字识别 1、安装与配置OCR工具 2. 读取图片并提取文字 3. 优化与提高识别准确率 五、实践与应用案例 六、结论 一、引言 随着数字化时代的到来&#xff0c;图…

LeetCode(704)二分查找⭐

给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…

利用矩阵特征值解决微分方程【1】

目录 一. 特征值介绍 二. 单变量常微分方程 三. 利用矩阵解决微分方程问题 四. 小结 4.1 矩阵论 4.2 特征值与特征向量内涵 4.3 应用 一. 特征值介绍 线性代数有两大基础问题&#xff1a; 如果A为对角阵的话&#xff0c;那么问题就很好解决。需要注意的是&#xff0c;矩…

git安装教程 Windows 附安装包链接

Git是一款分布式源代码管理工具(版本控制工具) 。 git的作用 当你需要做一个大工程的时候&#xff0c;文件的管理无疑是非常庞大的工作&#xff0c;因为你需要不断的修改更新文件内容&#xff0c;同时可能还要保留旧版本保证可以复原&#xff0c;这样就需要备份多个版本的文件…

如何通过PreMaint状态监测发现设备故障:以振动监测为例

在现代工业环境中&#xff0c;设备的健康状况对于维持生产效率至关重要。计划外停机可能导致巨大的成本损失&#xff0c;因此采用先进的监测技术成为预防性维护的核心策略之一。其中&#xff0c;振动监测作为一种早期故障检测手段&#xff0c;通过PreMaint状态监测系统的引入&a…

1688商品详情数据API接口(item_get-获得1688商品详情)搜索商品列表接口

1688是一个大型的B2B&#xff08;Business-to-Business&#xff09;批发平台&#xff0c;提供各种商品和服务的采购。如果你想要通过API接口从1688获取商品详情&#xff0c;通常你需要查看1688的开发者文档或联系他们的API支持团队了解具体的API接口信息和调用方法。 一般来说…