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。 
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虾皮如何查看自己的店铺

在虾皮&#xff08;Shopee&#xff09;平台上查看自己的店铺是非常重要的&#xff0c;因为它可以帮助您了解店铺的运营情况、管理商品和处理客户服务等。下面是在虾皮平台上查看店铺的步骤&#xff1a; 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制…

nn网络层-卷积层

一、1d/2d/3d Convolution 卷积运算&#xff1a;卷积核在输入信号&#xff08;图像&#xff09;上滑动&#xff0c;相应位置上进行乘加卷积核&#xff1a;又称为滤波器&#xff0c;过滤器&#xff0c;可认为是某种模式&#xff0c;某种特征。卷积过程类似于用一个模版去图像上…

【JAVA】怎么确保一个集合不能被修改

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 示例&#xff1a; 不可修改的List&#xff1a; 不可修改的Set&#xff1a; 不可修改的Map&#xff1a; 结语 我的其他博…

强化学习在生成式预训练语言模型中的研究现状简单调研

1. 绪论 本文旨在深入探讨强化学习在生成式预训练语言模型中的应用&#xff0c;特别是在对齐优化、提示词优化和经验记忆增强提示词等方面的具体实践。通过对现有研究的综述&#xff0c;我们将揭示强化学习在提高生成式语言模型性能和人类对话交互的关键作用。虽然这些应用展示…

STM32F103C8T6内部自带Bootloader模式之使用FlyMcu烧写程序

简介 实现自己的Bootloader前, 使用一下STM32内部自带的Bootloader对STM进行烧写 步骤 下载FlyMCU 参考 普中STM32-PZ6806L 使用FlyMcu串口烧录程序 Boot选择 Boot0->1 , Boot1->0 进到系统存储器 打开FlyMCU 1 选择串口波特率 2 选择程序 3 不需要使用辅助引脚 4 开…

Linux网络配置与抓包工具介绍

目录 一、配置命令 1. ifconfig 1.1 概述信息解析 1.2 常用格式 2. ip 2.1 ip link 数据链路层 2.2 ip addr 网络层 2.3 路由 3. hostname 3.1 临时修改主机名 3.2 永久修改主机名 4. route 5. netstat 6. ss 7. ping 8. traceroute 9. nslookup 10. 永久修…

书生·浦语大模型全链路开源体系 学习笔记 第三课

huggingface-cli: command not found 按照该文档解决即可 https://github.com/huggingface/huggingface_hub/issues/1079 具体如下&#xff1a; 1、确保环境已将安装huggingface-cli 2、版本需要旧版&#xff0c;pip install huggingface_hub0.20.1 3、再按如下执行 # T…

WCF几种寄宿方式IIS、Winform、控制台、Windows服务

WCF寄宿方式是一种非常灵活的操作,可以在IIS服务、Windows服务、Winform程序、控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便、高效提供服务调用。本文分别对这几种方式进行详细介绍并开发例子进行说明,以求大家对WCF寄宿的方式进行全面的认识和了解。 1、 WC…

计算机毕业设计 基于SpringBoot的项目申报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

探索雷盛537威士忌的魅力:从观色、闻香到品鉴

威士忌&#xff0c;这一源于苏格兰的特别烈酒&#xff0c;以其丰富的味蕾和特别的魅力征服了全球的品鉴者。品鉴威士忌不仅仅是一种感官体验&#xff0c;更是一种探索和发现的旅程。在本文中&#xff0c;我们将以雷盛537威士忌为例&#xff0c;与您深入了解品鉴威士忌的全过程&…

React-Hoc高阶组件与css-in-js技术

Hoc高阶组件 Higher - Order Components&#xff1a;在原有组件基础之上加工后新生成得到的新组件。【高阶组件】 const NewComponent HOC(YourComponent) 通俗的来讲&#xff0c;高阶组件就相当于手机壳&#xff0c;通过包装组件&#xff0c;增强组件功能。 HOC实现步骤&…

三分钟轻松搞懂 HashMap 死循环问题!

三分钟轻松搞懂 HashMap 死循环问题&#xff01; HashMap 死循环发生在 JDK 1.7 版本中&#xff0c;形成死循环的原因是 HashMap 在 JDK 1.7 使用的是头插法&#xff0c;头插法 链表 多线程并发 HashMap 扩容&#xff0c;这几个点加在一起就形成了 HashMap 的死循环。 前置…

Adding Conditional Control to Text-to-Image Diffusion Models——【代码复现】

官方实现代码地址&#xff1a;lllyasviel/ControlNet: Let us control diffusion models! (github.com) 一、前言 此项目的使用需要显存大于8G&#xff0c;训练自己的ControlNet或需要更大&#xff0c;因此请注意查看自身硬件是否符合。 在此之前请确保已经安装好python以及…

【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰

在上一篇博客&#xff08;【UE Niagara学习笔记】04 - 火焰喷射时的黑烟效果&#xff09;的基础上继续实现在火焰喷射的起点位置生成蓝色火焰的效果。 目录 效果 步骤 1. 创建新的发射器 2. 减少粒子生成数量 3. 减小粒子初始大小 4. 减少粒子喷射距离 5. 减少粒子初始…

在Linux上搭建Maven仓库

目录 一、下载安装包二、安装maven三、修改配置文件settings.xml四、配置环境变量五、测试maven是否可用 一、下载安装包 我在这里为大家准备好了apache-maven-3.5.0-bin.tar.gz&#xff0c;百度网盘下载链接如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bGun…

python编程使用selenium模拟登陆淘宝实例代码

selenium简介 selenium 是一个web的自动化测试工具&#xff0c;不少学习功能自动化的同学开始首选selenium &#xff0c;相因为它相比QTP有诸多有点&#xff1a; * 免费&#xff0c;也不用再为破解QTP而大伤脑筋* 小巧&#xff0c;对于不同的语言它只是一个包而已&#xff0c…

AFL进阶教学——插桩、执行、覆盖率收集与反馈(解析)

AFL&#xff08;American Fuzzy Lop&#xff09;是一个面向安全的模糊测试工具&#xff0c;它使用编译时插桩技术和遗传算法&#xff0c;可以自动发现触发目标二进程程序的测试用例&#xff0c;从而大大提高测试代码的功能覆盖率。本文主要讲述AFL是如何实现插桩的&#xff0c;…

提升网络安全重要要素IP地址

在数字化时代&#xff0c;网络安全已经成为人们关注的焦点。本文将深入探讨网络安全与IP地址之间的紧密联系&#xff0c;以及IP地址在构建数字世界的前沿堡垒中的关键作用。 网络安全是当今数字社会中不可忽视的挑战之一。而IP地址&#xff0c;作为互联网通信的基础协议&#…

RT-Thread:ADC 框架应用,通过 STM32CubeMX 配置 STM32 ADC驱动

关键词&#xff1a;ADC,RT-Thread ADC,STM32 ADC应用 说明&#xff1a;本笔记是记录如何开启 RT-Thread 框架的ADC功能&#xff0c;使用系统自带的ADC函数&#xff0c;并通过 STM32CubeMX 配置 STM32 ADC驱动 。 1. 打开board.h 文件&#xff0c;找到ADC 使用配置的流程&…

Dell 机架式服务器 - 高级定制服务

Dell 机架式服务器 - 高级定制服务 1. Dell Technologies2. 机架式服务器 - 高级定制服务2.1. Servers & Storage (服务器及存储) -> Servers2.2. Rack Servers (机架式服务器)2.3. Shop2.4. PowerEdge Rack Servers (PowerEdge 机架式服务器)2.5. PowerEdge R760 Rack …