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

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

相关推荐
Java水解9 分钟前
RabbitMQ用法的6种核心模式全面解析
后端·rabbitmq
用户40993225021210 分钟前
FastAPI的查询白名单和安全沙箱机制如何确保你的API坚不可摧?
前端·后端·github
前端小巷子18 分钟前
深入 npm 模块安装机制
前端·javascript·面试
橙序员小站19 分钟前
JDK17 前后写法对比:差点没认出是 Java
java·后端
肖哥弹架构20 分钟前
Spring JDBCTemplate 十大性能优化秘籍:从慢如蜗牛到快如闪电!
java·后端·程序员
wenb1n22 分钟前
【Oracle】套接字异常(SocketException)背后隐藏的Oracle问题:ORA-03137深度排查与解决之道
后端
苦学编程的谢23 分钟前
MyBatis_3
java·开发语言·后端·mybatis
是2的10次方啊24 分钟前
🦆 小黄鸭调试法:程序员必备的5种神奇调试技巧,让Bug无处遁形!
后端
wenb1n26 分钟前
【Oracle】Oracle分区表“排雷“指南:当ORA-14400错误找上门时如何优雅应对
后端