一文带你了解多数企业系统都在用的 RBAC 权限管理策略

2024-05-06 20:04

本文主要是介绍一文带你了解多数企业系统都在用的 RBAC 权限管理策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

哈喽你好呀,我是 嘟老板,今天我们来聊聊几乎所有企业系统都离不开的 权限管理,大家平时在做项目开发的时候,有没有留意过权限这块的设计呢?都是怎样实现的呢?如果现在脑子里对于这块儿不够清晰,那么,请跟我一起,来了解下企业系统常用的权限管理策略 - RBAC 模型。

介绍

为什么需要权限管理

要弄清楚这个问题,我们先来看看什么是权限?个人认为,权限就是一系列用户可用的系统资源的整合,可以大致分为以下三类:

  • 菜单权限:用户使用的菜单、查看的页面等。
  • 操作权限:系统页面中的交互功能按钮,如编辑,删除,新增等。
  • 数据权限:用户在页面中查看的数据内容,业务系统数据一般存在机密性,不同身份的用户查看的数据范围也有所不同。

了解了权限,那么 权限管理 也就比较清晰了,其实就是对系统用户访问资源的管理。根据业务要求的不同,用户看到的菜单、使用的功能、查看的数据都有所不同。

那么为什么要控制访问权限呢?因为不同的用户所负责的业务范围是不同的,比如管理者可以看到所有下属的信息,但是普通只能看到自己的;比如行政可以看到所有人的打卡记录,而普通员工只能看自己的;比如财务可以看到所有人的工资,而普通员工只能看到自己的…等等等等,

这都离不开 权限管理,通过为系统用户分配不同的权限,以达到精准控制的目的。

什么是 RBAC 模型

RBAC(Role-Based Access Control)即:基于角色的权限控制

基础设计如下: image.png

在整个流程中,将 菜单操作组织 等系统资源统一由权限管理,再通过角色关联用户角色关联权限的方式间接赋予用户权限。

那么,为什么需要角色这一节点呢,直接将权限分配给用户不是也可以实现吗?

当然可以,但是试想一下,如果为每个用户直接分配权限,首先权限配置就是一个比较大的工作量。而且,如果某一类用户的权限发生变更,就需要再次为每个人都变更权限配置,可见其扩展性维护性方面就弱了不少,只能适用于用户数量,权限分类较少的平台。

而有了角色这一节点,就可以为不同的角色分配不同的权限,用户只需要关联指定的角色,不需要为一一分配繁琐的权限。而且角色权限变更后,也只需要更新某一角色的权限配置,无需对每个用户进行调整。

实现

设计思路

清楚了什么是权限管理,接下来我们就来思考一下如何设计一套基础的权限系统,假设我们目前只需要管理菜单权限

image.png

如图所示,我们至少需要如下管理模块:

  • 用户管理
  • 菜单管理
  • 权限管理
  • 角色管理

其中,用户管理菜单管理 负责基础信息维护,权限管理 是一系列 菜单资源 的集合,角色管理 是一系列 权限 的集合,可分配给指定用户

从实际开发点来说,除了基础的 增删改查 之外,用户管理 需要 分配角色 功能,来为用户分配指定的一个或多个角色;权限管理 需要 分配菜单 功能,来为每个权限调整指定的菜单资源;角色管理 需要 分配权限 功能,来为每个角色分配一个或多个权限。

整个实现过程可大致分成三个部分:

  1. 实现前端管理模块
  2. 设计表结构,实现后端查询逻辑
  3. 前端路由管控,对标权限数据

1.实现前端管理模块

1.1 菜单层级设计

权限管理模块可以放到 系统设置 一级目录,与其他系统层级的配置一同管理。或者单独一个 权限管理 目录进行管理。

1.2 功能设计

我们来列举下相关的管理模块及可能涉及的操作:

  • 角色管理:新增、删除、查看、编辑、分配权限、启用/停用。
  • 权限管理:新增、删除、查看、编辑、分配菜单、启用/停用。
  • 菜单管理:新增、删除、查看、编辑、启用/停用。
  • 用户管理:新增、删除、查看、编辑、分配角色、启用/停用。

为什么需要 启用/停用 操作?

这是为了在状态上管理数据,如果数据没有状态,那么不需要的数据就只能删除,删除之后用户又想要找回这条数据怎么办。如果是逻辑删除的话还有办法,可以让技术在数据库后台手动恢复;但若是物理删除呢,那不好意思,只能用户重新建一条一样的了。不过无论是哪种删除模式,用户都没办法在前端界面直接操作。有了状态就不一样了,肯定不需要的数据直接删除,可能后续需要恢复的数据,就停用,需要时再次启用即可。

除了以上功能,角色管理 还可以加入 添加用户菜单管理 可以添加 指定权限 等类似的功能,使得配置入口更加灵活,可以在 用户管理 处分配角色,也可在 角色管理 添加用户,减少用户使用系统的心智负担。

2.表关系设计

此部分为后端内容,其实整个权限系统的的核心逻辑都是在后端,工作量大概占了 70% 左右。

我们先来看看涉及到的几个实体类及关系: image.png

其中 角色用户角色权限权限菜单 都是 多对多 的关系,即一个权限可以分配给多个用户,一个用户也可被分配多个权限,以此类比 角色权限,,权限菜单

鉴于此,数据表方面除了 角色用户权限菜单 四个基础表之外,还需要 角色-用户角色-权限权限-菜单 中间表,用于维护他们之间 多对多 的关联关系。

比如我们要实现 菜单 权限的控制,后端提供的 菜单 查询接口核心逻辑就是 根据当前用户所分配的所有角色,去匹配所有的菜单权限后做去重处理

本部分属于业务代码,就不贴代码了,后续代码会上传到[个人项目](github.com/ying2gege/z…

3.前端路由对标权限

这一步是前端处理的重点,在 2.数据管理逻辑处理 步骤中提供了匹配权限后的菜单查询接口,前端可以调用该接口获取到菜单数据。

那么请想一想,拿到菜单数据之后,前端需要做些什么呢?

前端需要根据菜单数据,来匹配前端路由数据,仅保留和菜单数据匹配的路由配置。

那么什么是路由呢?

对于 SAP 项目,前端只有一个 html 页面,但是在项目中会有很多个页面,他们会分别对应一个特定的 url,以实现页面刷新、跳转和后退等操作,能够实现以上功能的工具就是路由。以 Vue 项目为例,对应的路由工具叫做 VueRouter,可以通过 VueRouter 提供的 配置项组件API 实现页面的渲染和导航。

清楚了什么是路由,接下来就是匹配过程。那么问题又来了 拿什么来匹配前端路由配置

还是以 Vue 项目为例,路由至少需要以下配置项:

{name: 'Root',path: '/',component: () => import('@views/root/index.vue')
}

其中

  • name 是路由名称,全局唯一;
  • path 是页面对应的 url,全局唯一;
  • component 是对应的页面代码地址,即 vue 页面。

既然 name 属性全局唯一,我们自然就可以拿 name 属性作为匹配指标,但是和什么匹配呢,回想下关于 菜单 结构的设计,有一个 Code 字段,即菜单编码,我们可以将此字段同样设计成全局唯一,作为与路由 name 属性匹配的数据指标,只要路由 name 属性能够与菜单 Code 字段匹配上,就保留该路由配置。

核心代码贴上:

export function matchRoutesByAuthMenus(routes: RouteRecordRaw[],menus: ZiMuAuth.Menu[]
) {if (!menus.length || !routes.length) return []const menuCodes = menus.map(m => m.code)const matchRoutes = (routes: RouteRecordRaw[]) => {const target: RouteRecordRaw[] = []for (const route of routes) {const matched = !route.name || menuCodes.includes(route.name as string)if (matched) {if (route.children?.length) {route.children = matchRoutes(route.children)}target.push(route)}}return target}const result: RouteRecordRaw[] = matchRoutes(routes)return result
}

参数 routes所有路由配置menus后端返回的菜单列表。由于 路由配置 基本都存在嵌套的情况,所以采用 递归 的方式匹配子配置项,最终筛选出与菜单完全匹配的路由配置。

然后使用 VueRouteraddRoute API 将匹配后的路由配置循环添加到 router 中。

for (const route of matchedRoutes) {router.addRoute(route)
}

若想深入了解本步骤的实现逻辑,可前往《论真实 Vue 项目引发的对于路由权限的思考》

注: “添加到 router 中” 里提到的 router 是调用 VueRoutercreateRouter 函数创建的路由实例,后续的应用中所有路由相关的操作,如导航,都会用到该实例对象。不清楚的小伙伴可查看 官网。

增强

我们在上一趴实现了基础的权限管理,然而实际的企业系统,由于业务体量、人员基数等因素,可能需要更为复杂的权限管理系统。

经过无数业务实践的积累,业内也针对 RBAC 模型有个比较细致的分类,复杂度层层递进,着力满足绝大多数的业务场景。

  1. RBAC0模型:最基础的用户、角色、权限管理模型,与我们上面实现的相近。
  2. RBAC1模型:在 RBAC0 的基础上,增加了 子角色,引入继承的概念,即子角色可以继承父角色所有的权限,并支持在父角色的权限基础上进行删减。
  3. RBAC2模型:在 RBAC0 的基础上,增加对角色的一些限制,如角色互斥基数约束先决条件角色 等。
  4. RBAC3模型:称为统一模型,综合了 RBAC0RBAC1RBAC2 的所有特点。

虽然 RBAC 模型分了很多类,但是在实际项目中,应该结合企业的实际情况进行分析设计,不必非要追求实现某一个模型设计。比如公司规模不大的小型企业,比较基础的 RBAC0 模型就完全可以满足要求;若公司规模大、业务复杂、权限配置难度大,可以选择性的加入子角色互斥角色先决条件角色 等确保权限配置的建议性的精准度;若公司内部权限按部门划分,或某些小组划分,还可以加入 用户组,开辟另一个维度的管理方式,简化权限配置工作。

总之,权限管理并不是一种特定的范式,与企业实际业务情况息息相关。

结语

好啦,关于 RBAC 的内容就到这里啦,相信小伙伴在实际项目中也接触过其他的权限管理策略,比如访问控制列表(ACL)属性访问控制(ABAC)强制访问控制(MAC) 等等等等。欢迎评论区,大家一起讨论学习。

感谢阅读!愿你我共同进步,谢谢!!!

这篇关于一文带你了解多数企业系统都在用的 RBAC 权限管理策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965245

相关文章

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用   判断员工是否有权限访问,首先得知道现在操作的人是谁,所以必须先实现登录功能 2 登录流程   ① 提供登录页面,可输入用户名与密码信息,并添加执行登录的按钮。(登录页面不能被拦截)   ② 给按钮绑定点击事件(异步操作,POST请求)   ③ 事件中发送登录请求,使用 AJAX 方式提交。(使用 AJAX 原因:用户体验更好,既可保留用户刚输入的用户名和密码

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

企业如何进行员工的网络安全意识培训?

企业网络安全意识培训的重要性         企业网络安全意识培训是提升员工网络安全素质的关键环节。随着网络技术的快速发展,企业面临的网络安全威胁日益增多,员工的网络安全意识和技能水平直接关系到企业的信息安全和业务连续性。因此,企业需要通过系统的网络安全意识培训,提高员工对网络安全的认识和防范能力,从而降低企业在面对潜在安全风险时的损失和影响。 企业网络安全意识培训的方法         企

PS系统教程25

介绍软件 BR(bridge) PS 配套软件,方便素材整理、管理素材 作用:起到桥梁作用 注意:PS和BR尽量保持版本一致 下载和安装可通过CSDN社区搜索,有免费安装指导。 安装之后,我们打开照片只需双击照片,就自动在Ps软件中打开。 前提:电脑上有PS软件 三种预览格式 全屏预览 评星级 直接按数字键就可以 方向键可以更换图片 esc退出 幻灯片放

风水研究会官网源码系统-可展示自己的领域内容-商品售卖等

一款用于展示风水行业,周易测算行业,玄学行业的系统,并支持售卖自己的商品。 整洁大气,非常漂亮,前端内容均可通过后台修改。 大致功能: 支持前端内容通过后端自定义支持开启关闭会员功能,会员等级设置支持对接官方支付支持添加商品类支持添加虚拟下载类支持自定义其他类型字段支持生成虚拟激活卡支持采集其他站点文章支持对接收益广告支持文章评论支持积分功能支持推广功能更多功能,搭建完成自行体验吧! 原文

@ControllerAdvice:你可以没用过,但是不能不了解

1.概述 最近在梳理Spring MVC相关扩展点时发现了@ControllerAdvice这个注解,用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用 @ControllerAdvice,可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理,从而减少代码重复,提升代码的可维护性。 定义如下 /*** Specialization of {@link Component @

六西格玛培训公司:解锁成功之门,让企业与个人共赴“嗨”途

在竞争激烈的21世纪,六西格玛培训公司手握一把神奇的钥匙,帮助企业及个人轻松开启成功的大门。 对企业来说: 产品质量飞跃:不再是偶尔的精品,而是每个产品都如同精雕细琢的艺术品,吸引无数顾客争相购买。 工作流程优化:六西格玛培训如同精准的剪刀,剪去冗余,让工作流程更加顺畅高效。 客户满意度飙升:深谙客户需求的六西格玛,帮助企业精准把握市场脉搏,让每位客户都感受到宾至如归的满意。 战略转型游刃有