基于 RBAC 权限模型的架构设计

前言

在数字化时代,系统安全与权限管理变得至关重要。无论是企业内部的管理系统、多租户的SaaS平台,还是复杂的云服务架构,如何高效、安全地控制用户访问权限,始终是一个核心挑战。

想象一下,如果公司里的每个员工都能随意访问财务数据、删除核心业务信息,或者普通用户能直接修改管理员配置,那会带来多大的安全隐患?传统的权限管理方式(如直接给用户分配权限)不仅难以维护,还容易导致权限泛滥或遗漏。

这时,基于角色的访问控制(RBAC, Role-Based Access Control) 应运而生。它通过“角色”这一中间层,将用户与权限解耦,让权限管理变得更灵活、更安全、更易于扩展。无论是小型系统还是企业级应用,RBAC 都能提供清晰、高效的权限控制方案。

权限模型

在权限设计领域,最常见的权限模型有以下四种:

    1. ACL(Access Control List,访问控制列表)
      核心思想是直接为每个资源维护一个"谁能访问"的列表。
      权限能直接赋予用户,例如将查看订单列表(权限)赋予某位运营人员(用户)。但是这种模式的缺点在于,但用户量达到一定量级的时候,那么就需要对每个用户都进行一次授权操作,那么这个工作量就会相当大。
      特点
      ✅ 简单直观,适合小规模系统
      ❌ 难以维护(用户量增大时ACL列表爆炸)
      ❌ 不支持层级关系(如"部门主管自动继承组权限")
    1. RBAC(Role-Based Access Control,基于角色的访问控制)
      核心思想:权限不直接赋予用户,而是通过角色间接分配。
      这是软件设计中最常用的权限管理模型,相比于 ACL 模型,RBAC 模型在用户与权限之间多了一个元素「角色」,通过权限关联角色、角色关联用户的方法来间接地赋予用户权限,从而实现用户与权限的解耦。
      特点:
      ✅ 用户 ↔ 角色 ↔ 权限,三层结构
      ✅ 可扩展性强,适合企业级应用
      ❌ 基础模型不支持角色基础,模型变体支持角色继承(如“管理员”继承“普通用户”权限)
      ✅ 适用场景:企业管理软件、SaaS系统、内部权限管理
    1. ABAC( Attribute-Based Access Control, 基于属性的访问控制)
      核心思想:权限决策基于用户、资源、环境等多种属性动态计算。
      支持细粒度控制(如“仅在工作时间访问”“仅限本部门数据”),策略灵活,但实现复杂
      适用场景:云计算(AWS IAM)、动态权限管理
    1. PBAC( Policy-Based Access Control,基于策略的访问控制)
      核心思想:权限由策略引擎动态计算,结合规则引擎(如XACML)。
      适用于复杂业务规则(如“VIP用户可延长会话时间”)
      适用场景:金融风控、合规性管理

RBAC模型

RBAC权限架构设计是一种基于角色的访问控制模型,主要用于解决大型企业或系统中的复杂权限管理问题。这种模型将权限分配给角色,再将角色分配给用户,从而实现权限的灵活控制和精细管理。RBAC权限架构设计的核心内容包括角色定义、权限分配、角色-用户映射等,具有高度模块化、灵活性和可扩展性等特点。

image

上面说的是RBAC0模型,也是基础、最简单的,相当于底层逻辑,在此基础上,又升级出RBAC1、RBAC2、RBAC3模型

  1. RBAC1模型
    相对于RBAC0模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限。
  2. RBAC2模型
    基于RBAC0模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。
  3. RBAC3模型
    称为统一模型,它包含了RBAC1和RBAC2,利用传递性,也把RBAC0包括在内,综合了RBAC0、RBAC1和RBAC2的所有特点,既有角色分层又有约束的一种模型。

当平台用户基数增大,角色类型增多时,如果直接给用户配角色,管理员的工作量就会很大。这时候我们可以引入一个概念“用户组”,就是将相同属性的用户归类到一起。

实用的RBAC模型的数据库建模

以下模型均来自于互联网
image

引用:
https://juejin.cn/post/6844903905931821063
https://tsejx.github.io/blog/architect-design-based-on-rbac/
https://www.cnblogs.com/mumuxinfei/p/9354341.html

posted @ 2025-07-20 15:14  chenqi1231  阅读(158)  评论(0)    收藏  举报