🛡️《权限系统设计指南》:技术人迟早要走的那条“权力之路”

👉 添加我的微信:JKfog233,邀你加入【Hello World 进阶群】,一起成长、交流、内推、分享机会!

你以为开发就是写写前端组件、搞搞接口联调?错!等你项目跑通、用户活跃、数据重要------权限系统就会像鬼压床一样缠上你。

这时的你会发现:
权限系统,是所有复杂系统里最容易被低估的存在。

今天,就带你用最轻松的方式,搞懂这条"权力的游戏"。

🧭 一、权限系统到底是啥?

你可以把权限系统理解为一个守门人:

谁能干什么?对什么东西干?能干到什么程度?

换句话说,它是对「用户」「资源」「操作」三者关系的控制:

  • 用户是谁(user)
  • 操作是什么(action)
  • 操作作用于哪个对象(resource)

比如:

  • 张三能不能编辑项目A?
  • 李四是不是只能查看自己的报表?
  • 访客用户能不能下载源代码?(你敢我就报警)

🧱 二、常见三种权限模型

🟩 1. RBAC(Role-Based Access Control)

「我是谁不重要,我是什么角色才重要」

RBAC 是职场最爱:

  • 老板 ➡️ 管理员
  • 员工 ➡️ 编辑
  • 实习生 ➡️ 只读

逻辑类似:"给角色赋权限,用户继承角色"。

👑 优点:结构清晰,管理方便

😵 缺点:粒度粗,角色泛滥(最后 everyone 是 admin)

🧪 应用场景:

  • 公司内部系统
  • 多角色协作平台(CMS、后台系统)

🟨 2. ABAC(Attribute-Based Access Control)

「不是你是谁,而是你具备什么属性」

ABAC 更灵活,可以基于属性组合出各种规则:

例如:

js 复制代码
if (user.department === 'HR' && resource.type === 'report' && action === 'read') {
  // xxx
}

👑 优点:表达能力强,可扩展

😵 缺点:策略复杂,调试困难,测试容易爆炸

🧪 应用场景:

  • 金融、政企等高安全要求系统
  • 多租户平台中权限策略极为灵活的场景

🟦 3. PBAC(Permission-Based Access Control)

「我不关心你是谁,我只看你具体能做什么」

PBAC 的核心是:直接在数据库里写明谁可以做什么操作,不走"角色"那一套。

举例:
user_id = 1 可以 download project_id = 42
user_id = 2 可以 view project_id = 42

👑 优点:精细到每个动作,每个资源

😵 缺点:权限表可能像 Excel 一样长(你可能得配分页)

🧪 应用场景:

  • 协作文档、团队管理、GitHub类系统
  • 用户与资源权限绑定非常灵活的应用

🧩 三、实际落地怎么搞?

以下是开发人员关心的几个实践问题👇

💽 数据库设计

RBAC 模型下:

txt 复制代码
users           roles           permissions
 └── user_role  └── role_perm   └── actions

PBAC 模型下:

txt 复制代码
user_permission
├── user_id
├── resource_type
├── resource_id
└── action

ABAC 通常没有固定表结构,更像是在代码中编写规则引擎(或引入策略服务如 OPA)

🛠️ 技术实现选型(以 Node.js + PostgreSQL 为例):

  • RBAC 👉 通过角色表和权限表关联,控制访问逻辑
  • PBAC 👉 建一个"权限表",每次请求根据 user_id + action + resource 做查表校验
  • ABAC 👉 可以用 OPA(Open Policy Agent),或者用 json-rules-engine、casbin.js 进行策略判断

🚀 四、举个例子:团队 + 项目 + 用户

场景设定:

  • 一个团队下有多个用户
  • 一个项目可以被多个用户协作
  • 项目里有三种角色:拥有者、管理者、开发者

怎么设计?

✅ 团队与用户:使用 RBAC ,设定组织内部角色(如团队管理员)

✅ 用户与项目:使用 PBAC,记录某个用户在某个项目中的角色和权限

例如:

ts 复制代码
project_user
├── user_id
├── project_id
├── role_id   // role: OWNER, ADMIN, DEVELOPER

然后根据 role_id 再映射到权限表中定义的行为集。

🧠 五、一个通透的总结

模型 优点 缺点 适用场景
RBAC 简单清晰、易管理 粒度粗、角色爆炸 内部系统、组织管理
PBAC 灵活精细、直观 权限数据多、难维护 协作平台、文档系统
ABAC 表达力强、策略灵活 规则复杂、难测试 安全敏感、策略丰富的系统

🧙‍♂️ 最后的建议:

设计权限系统,就像谈恋爱:别光看当前的需求,要看长期能不能"对得上号"。

小团队就别整太复杂,RBAC 完全够用。

大系统想要细颗粒度灵活授权?PBAC or ABAC 趁早上!

记住:

  • 权限系统不是给你设计炫技用的,它是系统稳定和安全的基石。
  • 不管你多会造火箭,用户看到一个按钮他点不了,你就是 Bug。

如果你看完还觉得意犹未尽,欢迎留言/私信/点赞收藏,我可以分享更多「实战代码」版本!😎

👉 添加我的微信:JKfog233,邀你加入【Hello World 进阶群】,一起成长、交流、内推、分享机会!

相关推荐
2501_944875516 分钟前
Go后端工程师
开发语言·后端·golang
foundbug9999 分钟前
Modbus协议C语言实现(易于移植版本)
java·c语言·前端
该用户已不存在9 分钟前
没有这7款工具,难怪你的Python这么慢
后端·python
Luna-player10 分钟前
在前端中list.map的用法
前端·数据结构·list
用户479492835691514 分钟前
面试官问 React Fiber,这一篇文章就够了
前端·javascript·react.js
肌肉娃子26 分钟前
seatunnel-mysqlcdc同步clickhouse方案
后端
LYFlied26 分钟前
【一句话概述】Webpack、Vite、Rollup 核心区别
前端·webpack·node.js·rollup·vite·打包·一句话概述
阿拉斯攀登32 分钟前
SkyWalking使用:Spring Boot场景
spring boot·后端·skywalking
reddingtons38 分钟前
PS 参考图像:线稿上色太慢?AI 3秒“喂”出精细厚涂
前端·人工智能·游戏·ui·aigc·游戏策划·游戏美术
一水鉴天39 分钟前
整体设计 定稿 之23+ dashboard.html 增加三层次动态记录体系仪表盘 之2 程序 (Q199 之2) (codebuddy)
开发语言·前端·javascript