核心术语与心智模型
本页只解释后续示例里最常见的几个词。看完以后,你应该能分清“在哪个租户里判断谁的什么权限”,以及什么时候读 direct、什么时候读 effective。
先记住一条主线
宿主应用先完成登录并确认用户身份,再把可信的 userId 和租户范围交给 permission-core。permission-core 不验证密码或令牌,只根据已保存的角色与规则回答“这个用户能不能操作这个资源”。
几个常用词
租户、用户与角色的关系
- 租户不是角色。
tenantId决定到哪一套权限数据中查询。 - 用户由宿主管理。 permission-core 只保存“这个用户 ID 在当前 scope 绑定了哪些角色”。
- 角色属于 scope。 两个租户可以都有
order-reader,它们仍是两份互不共享的数据。 - 一个用户可以有多个直接角色。 运行时会再合并父角色,得到有效角色。
- 没有 allow 就拒绝。 不需要专门给每个不能访问的接口写 deny。
scope() 和 forSubject() 都只创建上下文,不会写数据库。管理写入建议在 scope(scope, defaults) 里一次绑定 actorId/requestId;真正的读取或写入发生在后续 roles.*、userRoles.*、subject.can() 等调用中。
direct 和 effective 怎么选
一句话:编辑页面看 direct,权限诊断看 effective。
不要把有效结果原样保存回直接集合,否则会把继承关系拍平,后续很难维护。
下一步怎么读
| 你要做什么 | 下一页 | |---|---|---| | 给用户分配角色 | 管理角色与用户授权 | | 判断用户能不能访问接口 | 检查权限 | | 理解父角色继承 | 角色继承 |