Permission 的身份:module : resource : action [! state]
一条 Permission 就是一个「能不能做」的最小开关。它需要一个稳定、可读、可枚举的身份——
一个 key。约定俗成的结构是三段(可选第四段):
Module(业务边界 / context / domain)·Resource(操作对象)·Action(动词),
必要时再加 !State 把动作限制在某个状态下。点选下面各段,拼出一条 key。
Module — 哪个业务域 (context/domain)
Resource — 对什么对象
Action — 做什么动作
CRUD · 数据流 (import/export) · 业务流转 (submit/approve/…)
!State — 可选:只在某状态下允许
submit → approve / reject → cancel → rollback → reopen → archive,
每一步都是一条独立的「能不能做」。把它们拆成独立 action,才能精细授权:
让运营能 approve 但不能 rollback。
Action 的三类(本系列采用的集合)
| 类别 | 动作 | 说明 |
|---|---|---|
| CRUD | read / create / update / delete | 对象的基本增删改查 |
| 数据流 | import / export | 批量进出,常单独管控(导出 = 数据外泄风险) |
| 业务流转 | submit / approve / reject / cancel / rollback / reopen / archive | 状态机上的转移,通常配 !state |
!State 的含义:把 action 限制在资源处于某个状态时才允许。
例如 content:article:approve!submitted 表示「只能审批处于 submitted 的文章」——
已发布或草稿状态的文章不在这条权限的范围内。状态门把「权限」和「业务状态机」衔接起来,是能不能做这一维里最细的一层。