公共 API 参考(@saas/contracts + @core/saas-kit + apps/api 对外接口)
    Preparing search index...

    租户级权限裁决端口(读侧:can 单点判定 / listPredicate 列表谓词)。

    interface PermissionChecker {
        can(check: PermissionCheckInput): Promise<boolean>;
        listPredicate(
            check: PermissionListPredicateRequest,
        ): Promise<PermissionListPredicate>;
    }
    Index
    • 纯裁决:是否放行(异步签名·S2 规则源 DB)。

      Parameters

      Returns Promise<boolean>

      是否放行

      deny 由守卫落 403(fail-closed);适配器对「查无角色/无租户/词汇外」恒拒,绝不因加载失败视同放行。 守卫路径(无 resource)的 read/write 分治语义见上方「形状扩展注记」(人裁 A1)。

    • query 级列表过滤谓词(module-rbac-query-level-filtering 切片 B·dynamic-roles §2.4 缓账兑现·丁裁契约 additive)。

      Parameters

      Returns Promise<PermissionListPredicate>

      三态谓词(all / where / none)

      与 can 同源同口径:同一角色 + 同一 userId 下,列表可见集 = 逐条 can() 允许集(「列表 ⊆ 逐条」)。 三态返回(消费方=应用层列表面 handler·见参考应用 ListWorkspacesQueryHandler·人裁⑤):

      • { kind: 'all' }:该角色对此 action/subject 存在无条件类型级授权(conditions=null 行) ⇒ 列表按 tenantFilter 全量(承 S2 类型级·无 instance 限制);
      • { kind: 'where', where }:仅带 conditions 的授权 ⇒ 实例谓词($or 并语义·人裁②),由消费方 AND 进 tenantFilter;
      • { kind: 'none' }:无任何匹配 grant 行 / 不可解析 / 加载失败 / 无租户无角色 ⇒ 空集(fail-closed·绝不回退全量)。