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

    角色/授权管理门面应用服务(module-rbac-dynamic-roles §2.5/§2.6·S3)。

    职责边界(授权在我·事实入 DB):

    • 从 ALS 取活动租户(requireActiveOrganizationId·fail-closed)与操作者(userId·审计 actorId,缺省 null);
    • 委派 OrganizationRbacRepository(授权事实 SSOT 的唯一读写通道·写侧先过 domain 策略闸并同通道落审计行);
    • 将端口返回的领域结果码转译为 HTTP 语义(领域不借异常表达事实,转译归应用层);
    • 写成功后失效本租户投影缓存(PermissionInvalidator·热改即生效·读写分治端口)。

    管理职权本身由 controller @Can(<动作>, 'Role' | 'RoleGrant') + CASL 守卫裁决(授权面), 本服务不复权限判定(禁散点特判);自定义角色对成员的挂载存在性校验见 isRoleAssignable。

    Implements

    Index
    • 新增授权格(invalidConditions→400、roleNotFound→404、duplicate→409),成功后失效缓存。

      Parameters

      • roleKey: string

        目标角色 key。

      • entry: {
            action: "create" | "read" | "update" | "delete" | "cancel";
            conditions: Record<string, unknown> | null;
            subject:
                | "Organization"
                | "Member"
                | "Invitation"
                | "Workspace"
                | "Role"
                | "RoleGrant";
        }

        授权行(subject/action/conditions)。

      Returns Promise<void>

      grant conditions 形状不在白名单内时。

      指定角色不存在时。

      授权条目已存在时。

    • 成员挂载角色存在性校验(§2.5·S3·供成员/邀请门面复用):role 须 ∈ 系统三 key ∪ 本租户 已存在的自定义角色 key——查库严格在库 fail-closed(class-validator 同步式不可查库,故收此处)。 系统三 key 恒可挂(租户尚未 lazy-ensure 时 findRole 会查无,故先走内置词汇短路)。

      Parameters

      • role: string

        待校验的角色 key。

      Returns Promise<boolean>

      可挂载时为 true。

    • 撤权(roleNotFound→404、无匹配行→404),成功后失效投影缓存。

      Parameters

      • roleKey: string

        目标角色 key。

      • subject: "Organization" | "Member" | "Invitation" | "Workspace" | "Role" | "RoleGrant"

        授权主体。

      • action: "create" | "read" | "update" | "delete" | "cancel"

        授权动作。

      • conditions: Record<string, unknown> | null

        等值匹配条件;null = 整 subject 级行。

      Returns Promise<void>

      匹配的授权条目不存在时。