权限管理服务核心目标是把“谁可以对什么资源执行什么操作”沉淀为可管理、可校验、可查询的授权策略。服务通过 Cedar policy 对 principal、action、resource 和原始调用方链路进行 allow/deny 决策,并为权限网关和业务服务提供统一鉴权入口。
一个典型接入流程是:先创建权限空间,再注册资源和动作,随后通过策略或快捷授权建立权限关系,最后在运行时调用鉴权接口。需要展示权限、排查授权或做列表过滤时,可使用主体权限反查和对象权限反查接口。
- 如果您是业务管理员,重点关注权限空间、资源动作、策略和权限点的配置顺序。
- 如果您是服务研发,重点关注 CheckPermission、CheckPermissionWithToken、IsAuthorized 和 References 的传参语义。
- 如果您是权限网关使用者,重点关注资源类型、动作 key、权限空间和策略状态是否与网关路由保持一致。
权限空间是 policy、resource、action 和 permission point 的归属边界,通常对应一个业务、产品线、租户或环境。NamespaceName 是账号内可读名称,默认可使用 default;NamespaceId 是内部稳定 ID。
- 隔离不同业务或环境的授权数据,避免策略、资源和动作互相污染。
- 承载资源树、动作列表、权限点和策略列表的统一查询入口。
- 作为管理面对象定位的优先字段,与业务 key 组合使用。
资源表示被访问对象,例如知识库、文档、数据库集合、模型、项目或工作流。资源由 ResourceType 和 ResourceKey 共同表达,支持父子层级和资源树查询。
- 在权限空间内维护资源 key、资源名称、资源类型、父资源关系和启停状态。
- 通过 ParentResourceKey 维护资源树路径,支持按根节点和深度查询。
- 通过 Enabled 控制资源是否参与业务侧展示或治理流程。
- ResourceKey 在权限空间内应稳定可读,不允许包含 /。
- 资源树路径由父子关系维护,不建议业务方自行拼接为策略判断依据。
- 创建时 Enabled 默认可按业务规则置为 true;如需冻结资源,可通过更新接口显式关闭。
动作表示主体可以对某类资源执行的操作,例如 read、write、delete、search 或业务自定义动作。动作通常与权限网关路由的 ActionValue 保持一致。
- 在 ResourceType 下维护可授权动作。
- 通过启停状态控制动作是否可用于控制台选择和治理。
- 为策略编写、快捷授权、权限反查和权限网关 APISpec 提供统一词表。
- 动作 key 一旦被策略、网关路由或业务代码依赖,应避免直接改名;需要变更时先新增再迁移。
策略是最终参与 Cedar 引擎判定的授权规则。策略包含 effect、principal、operation、resource、condition 等表达式;状态为 ENABLE 时参与鉴权,状态为 DISABLE 时不参与授权决策。
- 创建、校验、查询、更新和删除 Cedar policy。
- 通过 GrantPermission 快速生成常见主体到资源动作的授权关系。
- 支持 permit 和 forbid;运行时最终结果以 Cedar 引擎判定为准。
- 确认策略中的主体、动作和资源表达式符合业务模型。
- 调用 ValidatePolicy 校验 Cedar policy。
- 创建策略并保持 Status=ENABLE,或先以 DISABLE 保存草稿。
- 使用测试主体调用鉴权接口,验证 allow/deny 是否符合预期。
权限点把业务中的鉴权位置注册到权限空间,例如某个页面按钮、后端接口、工作流节点或网关路由。权限点可配置为强拦截或宽松观察模式。
- 按 NamespaceName 与 AuthPointId 唯一定位业务鉴权点。
- 支持从 PERMISSIVE 观察模式逐步切换到 ENFORCE 强拦截模式。
运行时鉴权把一次访问请求转换为主体、动作、资源、上下文和引用关系,再交给策略引擎判定。业务服务可直接传主体,也可通过 token 解析主体。
- 支持直接鉴权、权限封装鉴权和 token 鉴权。
- 支持 References 表达主体或资源父实体关系,例如用户属于团队、文档属于空间。
- 支持 OriginalCallers 描述上游调用链,便于区分直接访问和代理访问。
- Subject:访问发起方,使用 Type 和 Id 表达。
- Action:当前访问动作,应与动作模型中的 ActionKey 对齐。
- Resource:当前访问对象,应与资源模型中的 ResourceKey 对齐。
- Context:运行时上下文,例如环境、来源、请求属性等。
- References:主体或资源的父实体关系,用于 Cedar 关系判断。
权限反查用于回答“某个主体拥有哪些权限”或“某个对象对哪些主体开放”。它主要服务于权限展示、排障、列表过滤和运营分析。返回内容是策略投影,不等同于完整运行时授权判定。
- 批量查询主体维度的权限投影,支持每次最多 100 个 task。
- 批量查询对象维度的权限投影,支持按主体类型、动作、对象类型和 effect 过滤。
- 默认只返回 permit;需要排查 forbid 时必须显式传入 Filter.Effects。
- 顶层使用 NamespaceName 加 Tasks 批量查询。
- 任一 task 参数非法时按请求错误返回,不做部分成功。
- wildcard 投影以 Type=any、Id=any 形式返回并参与过滤。
- 带 Cedar condition 的策略只有在 task 显式包含 conditional policy 时返回,并携带 condition 文本。
标签、项目和配额用于治理权限资源、控制台筛选和容量确认。它们不是授权决策的核心输入,但会影响资源管理、展示和创建前检查。
调用 CreateNamespace 创建业务独立的权限空间,记录 NamespaceName 和 NamespaceId。
调用 CreateResource 创建资源;如有父子关系,填入 ParentResourceKey 并用 GetResourceTree 检查结构。
调用 CreateAction 为资源类型创建动作 key,例如 read、write、delete 或业务自定义动作。
使用 CreatePolicy 写入 Cedar policy,或用 GrantPermission 生成常见授权。
调用 ValidatePolicy 确认策略语法和结构无误。
调用 CheckPermission 或 IsAuthorized,传入主体、动作、资源、上下文和引用关系。
如果结果不符合预期,先检查策略状态是否为 ENABLE,再检查资源 key、动作 key 和引用关系。
需要看“用户有什么权限”时使用 BatchGetSubjectPermissions;需要看“资源对谁开放”时使用 BatchGetObjectPermissions。
在同一个 NamespaceName 下提交 task,单次最多 100 个。
按动作、对象类型、主体类型或 effect 过滤;不传 effect 时默认只看 permit。
把返回结果理解为策略投影。涉及上下文条件、动态属性或业务侧额外限制时,应再调用运行时鉴权确认。
优先检查策略状态是否为 ENABLE。状态为 DISABLE 的策略不会参与授权决策。随后检查请求中的主体、动作、资源 key、资源类型和引用关系是否与策略表达式一致。
资源 key 或动作 key 可以包含路径分隔符吗?
不可以。ResourceKey 和 ActionKey 均不允许包含 /。如果业务资源天然是路径,建议把路径作为属性或独立字段保存,将稳定短 key 作为授权标识。
不能。权限反查返回的是命中策略的投影,默认只返回 permit。运行时鉴权还会受到上下文、引用关系、条件策略、forbid 规则和权限点模式影响。
权限管理维护权限空间、资源、动作和策略;权限网关维护服务、路由和 APISpec。一次请求进入网关后,网关抽取资源标识和动作,再调用权限管理获得最终 allow/deny 结果。