RBAC权限管理概念

news2024/12/23 17:43:42

基于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.coloradmin.cn/o/1368863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试|MySQL主键自增详解:实现高效标识与数据管理

简介 在MySQL数据库中&#xff0c;主键自增是一种常见的技术&#xff0c;用于自动为表中的主键字段生成唯一的递增值。本文将深入讨论MySQL主键自增的原理、用途、使用方法&#xff0c;以及在实践中的注意事项和最佳实践。 主键自增 主键自增的原理 主键自增是通过使用AUTO…

蓝桥杯 python 第二题 数列排序

这里给出一种解法 """ # 错的 n int(input()) dp[int(i) for i in input().split(" ")] dp.sort() print(" ".join(str(i) for i in dp)) """#这个是对的 num int(input())l list(map(int, input().split()))l.sort()pr…

CLIP论文总结

文章目录 NLP的积淀Method1. 预训练的方法&#xff1a;放宽约束&#xff1a;对比学习2. 模型训练训练时间 ExperimentsMotivationPrompt&#xff1a;提示&#xff1a;也就是文本的引导作用Prompt enginneringPrompt ensembling 对比实验 NLP的积淀 取之不尽用之不竭的自监督信…

常孝元宇宙《神由都城》发布会成功召开

2024年1月9日,2024常孝元宇宙《神由都城》发布会在北京市中国科技会堂举办,由中国移动通信联合会元宇宙产业工作委员会主办,常州神由之星数字信息产业发展有限公司、常州孝道文化产业股份有限公司共同承办。 本次发布会以“创新引领、协同发展”为主题,邀请第十二届全国政协副主…

海淘注意事项科普

关税和税费&#xff1a; 在海淘过程中&#xff0c;您可能需要支付关税和其他税费。了解目标国家的相关规定&#xff0c;预先了解可能的费用&#xff0c;并确保考虑到这些额外成本。 货币汇率&#xff1a; 注意货币汇率的波动&#xff0c;以避免因兑换率变化导致支付更多费用。…

Unity | Shader基础知识(第九集:shader常用单词基础知识速成)

目录 一、顶点&#xff08;Vertex&#xff09;和法线(Normal) 二、UV信息 三、 基础数据种类 1 基础数据种类 2 基础数据数组 3 基础数据数组的赋值 4 对数据数组的调用 四、 基础矩阵 1 基础矩阵种类 2 对矩阵数组的调用 2.1对一个数据的调用 2.2对多个数据的调用 2…

【华为】IPsec VPN 实验配置(动态地址接入)

【华为】IPsec VPN 实验配置&#xff08;动态地址接入&#xff09; 注意实验需求配置思路配置命令拓扑R1基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA ISP_R2基础配置 R3基础配置配置第一阶段 IKE SA配置第二阶段 IPsec SA PCPC1PC2 检查建立成功查看命令清除IKE / IPsec…

视频号小店和抖音小店相比,新手做哪个比较好?

我是电商珠珠 抖音小店在19年被抖音所发展&#xff0c;在这过程中&#xff0c;抖音小店通过自身的不断完善&#xff0c;从兴趣电商到全域兴趣电商模式&#xff0c;从直播电商到商城的出现&#xff0c;凭借着门槛低流量高的优势&#xff0c;让很多商家尝到了红利。 尤其是在20…

CVE-2023-51385 OpenSSH ProxyCommand命令注入漏洞

一、背景介绍 ProxyCommand 是 OpenSSH ssh_config 文件中的一个配置选项&#xff0c;它允许通过代理服务器建立 SSH 连接&#xff0c;从而在没有直接网络访问权限的情况下访问目标服务器。这对于需要经过跳板机、堡垒机或代理服务器才能访问的目标主机非常有用。 二、漏洞简…

解码 Elasticsearch 查询 DSL:利用 Elasticsearch 中的 has_child 和 has_parent 查询进行父子文档搜索

今天&#xff0c;让我们深入研究 has_child 查询和 has_parent 查询&#xff0c;这将帮助我们将 2 个不同的文档组合到一个索引中&#xff0c;从而使我们能够将它们与关系关联起来。 这样做会对我们搜索相关文档时有很大帮助。 在使用 has_child 及 has_parent 这种关系时&…

计算机网络 —— 物理层

物理层 2.1 物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。 物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据链路层只需要考虑如何完成本层的协议和服务&#xff0c;而不必考虑网络具体的传输媒体是什么 2.2 物理层下…

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性 将skip属性注释掉或者改为false 如果为true&#xff0c;则工程找不到主启动类

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

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

在wsl中安装miniconda

下载安装包 打卡miniconda的官网https://docs.conda.io/projects/miniconda/en/latest/,下载下来安装包&#xff0c;或者直接在乌班图中运行命令wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-x86_64.sh,等待下载完毕 安装 到下载目录下执行命令…

【WinRAR】右键压缩文件功能没了怎么办?

我们安装了WinRAR之后想要压缩文件&#xff0c;但是右键点击文件之后发现并没有WinRAR压缩选项&#xff0c;这应该如何设置才能出现右键带有压缩选项呢&#xff1f;方法如下&#xff1a; 首先打开WinRAR&#xff0c;在上面功能中点击选项 – 设置 然后我们在设置界面中切换到集…

C++学习笔记(二十九):c++ 创建与使用库

c自己创建库并使用库。当项目较大时&#xff0c;创建库有助于帮助代码模块化&#xff0c;同时提高代码重用。同时使用库允许程序中混合使用编程语言。首先创建一个空项目名为Game&#xff0c;接着在visiualstudio的解决方案上右击->添加->新建项目&#xff0c;添加一个空…

TS 36.213 V12.0.0-PUSCH相关过程(1)-传输PUSCH的UE过程

​本文的内容主要涉及TS 36.213&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

全新链动2+1模式,提升用户粘性度,增加产品复购率!

在互联网电商行业中&#xff0c;消费增值模式已经成为一种强大的营销工具。通过将消费者所消费的金额转化为积分&#xff0c;再利用平台的销售业绩作为托底&#xff0c;使得积分的价值不断增长&#xff0c;从而增加了消费者的忠诚度和黏性。然而&#xff0c;在实际操作中&#…

MySQL批量插入技巧

关于MySQL批量插入的一些问题 MySQL一直是我们互联网行业比较常用的数据&#xff0c;当我们使用半ORM框架进行MySQL大批量插入操作时&#xff0c;你是否考虑过这些问题: 进行大数据量插入时&#xff0c;是否需要进行分批次插入&#xff0c;一次插入多少合适&#xff1f;有什么…

npm run dev,vite 配置 ip 访问

启动项目通过本地 ip 的方式访问 方式一.通过修改 package.json "scripts": {"dev": "vite --host 0.0.0.0",}, 方式二.通过修改 vite.config.ts export default defineConfig({plugins: [vue(), vueJsx()],server: { // 配置 host 与 port 方…