RBAC / 权限 总览待审核
Scope · 对谁做

AllowedScope:同一个 action,对谁做

Permission 回答「能不能做」,Scope 回答「对谁做」。这是两个正交的维度。 仅有 order:read(见 Permission 的身份)还不够—— 能读所有人的订单,和只能读自己的,是两种完全不同的权力。 区分它们的就是 AllowedScope(数据范围)。常见是一条从宽到窄的链: Full ⊃ Group ⊃ Self ⊃ Public ⊃ None。选一个 scope,看同一张表里哪些行你看得到。

选一个 AllowedScope(当前身份:me · 属于 A 组)

commerce:order:read @ Self —— 你能看到的数据行

两个轴,不要混为一谈

把「能不能做」和「对谁做」拆开,授权就清晰了。下表把同一个 action 配不同 scope, 每格是一种真实的权力:

能力 (action)@ Self@ Group@ Full
article:update自己的文章本组的文章所有文章
order:read自己下的单本组负责的单全平台的单
order:cancel取消自己的单取消本组的单取消任意
由此可见:「客服只能退本组的单」「作者只能删自己的稿」这种需求,不该靠创建新角色来解决, 而是同一条 permission 配不同 scope。混淆这一点,是权限系统失控的首要原因。

Scope 的取值(本系列)

Scope 是数据层的事。「能不能进这个页面」UI 能拦;但「这页里到底返回哪几行」 必须在查询时按 scope 加 WHERE 条件——否则前端隐藏的行,直接调用 API 就能全部取到。 这条约束由 Server 层Repository 落实。