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

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

相关推荐
杨天天.1 分钟前
小程序原生实现音频播放器,下一首上一首切换,拖动进度条等功能
前端·javascript·小程序·音视频
Dragon Wu11 分钟前
React state在setInterval里未获取最新值的问题
前端·javascript·react.js·前端框架
Jinuss11 分钟前
Vue3源码reactivity响应式篇之watch实现
前端·vue3
YU大宗师14 分钟前
React面试题
前端·javascript·react.js
木兮xg15 分钟前
react基础篇
前端·react.js·前端框架
胡萝卜的兔25 分钟前
go 日志的分装和使用 Zap + lumberjack
开发语言·后端·golang
ssshooter39 分钟前
你知道怎么用 pnpm 临时给某个库打补丁吗?
前端·面试·npm
en-route1 小时前
如何在 Spring Boot 中指定不同的配置文件?
java·spring boot·后端
栀椩1 小时前
springboot配置请求日志
java·spring boot·后端
IT利刃出鞘1 小时前
HTML--最简的二级菜单页面
前端·html