👉 添加我的微信: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 进阶群】,一起成长、交流、内推、分享机会!