Skip to content

👏 RBAC 权限管理模型

✍️ 作者:桑榆
🕓 更新时间:2025-10-26
🧠 关键词:RBAC权限管理模型

🧩 一、RBAC 是什么?

RBAC 全称 Role-Based Access Control

翻译过来就是 “基于角色的访问控制”

一句话解释:

✅ 用户不直接拥有权限,而是通过角色(Role)间接获得权限。

你可以理解为:

“用户 → 扮演 → 角色 → 拥有 → 权限”

🧠 二、核心思想

传统的权限控制是 “用户直接绑定权限”

text
用户A → 新增菜单权限
用户B → 删除菜单权限

但当系统越来越大时,每个用户都要单独维护权限,复杂且容易出错。

RBAC 的思想是中间加一层“角色”:

text
用户A、用户B → 分配角色(管理员、编辑、访客)
每个角色 → 绑定对应的权限(增、删、改、查)

这样:

  • 新增用户时只要分配角色;
  • 修改权限时只改角色;
  • 权限控制简单清晰。

🧱 三、RBAC 模型核心结构

RBAC 模型中有 4 个关键实体:

实体说明
👤 用户(User)系统中的操作主体,比如员工、管理员
🧩 角色(Role)权限的集合,比如“超级管理员”、“内容编辑”
🔑 权限(Permission)对系统资源的具体操作能力,比如“查看菜单”、“删除用户”
📦 资源(Resource)权限作用的目标,比如“菜单”、“文章”、“用户管理页”

关系如下图:

text
User ── 多对多 ── Role ── 多对多 ── Permission ── 多对一 ── Resource

通俗理解:

“小明” 是 “管理员” → 管理员能 “编辑用户” → 编辑用户作用于 “用户模块”

🧭 四、RBAC 模型分层版本(从简单到复杂)

🔹 RBAC0:基础模型

最简单的 RBAC。

text
用户 ←→ 角色 ←→ 权限

用户通过角色间接获得权限。

这是最常见的结构,适合中小型系统。

🔹 RBAC1:支持角色继承

角色可以继承其他角色的权限。

比如:

text
系统管理员 > 内容管理员 > 普通用户
  • “系统管理员” 拥有所有权限;
  • “内容管理员” 拥有部分权限;
  • “普通用户” 拥有基础权限。

这种层级继承让权限复用更方便。

🔹 RBAC2:支持约束(限制规则)

可设置一些约束条件,例如:

  • 一个用户不能同时拥有“财务”和“审计”两个角色;
  • 某个角色仅在特定部门内可用。

这类“约束规则”让权限体系更安全。

🔹 RBAC3:综合模型

将 RBAC1 + RBAC2 结合使用,

是企业级系统中最完整的权限体系。

⚙️ 五、RBAC 实际数据结构(常见表设计)

表名字段说明
userid, username, password用户表
roleid, name, description角色表
permissionid, name, code, resource权限表
user_roleuser_id, role_id用户与角色的关联表
role_permissionrole_id, permission_id角色与权限的关联表

示例:

用户角色权限
小明管理员用户管理、菜单管理
小红编辑内容发布、内容审核
小李访客仅查看内容

🧩 六、RBAC 权限校验逻辑

1️⃣ 用户登录,后端签发一个带有角色信息的 JWT:

json
{
  "userId": "1",
  "roles": ["admin", "editor"]
}

2️⃣ 前端路由根据角色判断可访问页面:

ts
if (user.roles.includes('admin')) {
  showAdminMenu();
}

3️⃣ 后端接口权限验证:

ts
function checkPermission(userRoles, requiredRoles) {
  return userRoles.some(role => requiredRoles.includes(role));
}

4️⃣ 数据库存储角色-权限对应关系,实现统一授权。