✅ 組織バリデーター
組織ルートは、ルートペイロードに対して以下のローカルおよび共通バリデーターファクトリーを組み合わせます。バリデーターはレスポンス値なしで解決され、失敗時にはハンドラーパイプラインの実行前にソース定義の NodeblocksError をスローします。
一覧
| バリデーター | 読み取る値 | 成功条件 | 失敗 / エラー | 利用箇所 |
|---|---|---|---|---|
isAuthenticated() | context.authenticate または Bearer フォールバック | 選択された認証トランスポートがリクエストを受け入れる。 | 認証アダプターエラー。 | 18 のすべての Organization ルート。 |
checkIdentityType(['admin']) | 認証アダプター、db.identities、configuration.identity.typeIds | 呼び出し元が構成済みの管理者タイプを持つ。 | セットアップは 500、トークンは 401、アイデンティティ/アクセスは 403。 | 18 のすべての Organization ルート。管理者専用ルートでは直接、または some(...) を通じて実行。 |
some(...validators) | 指定されたバリデーター | 少なくとも 1 つの分岐が成功する。 | すべての分岐が失敗した場合、最初に収集されたバリデーターエラー。 | getOrganizationRoute、updateOrganizationRoute、deleteOrganizationRoute、メンバールート、階層/アップロード/変更リクエストルート、getOrganizationFollowersRoute。 |
all(...validators) | 指定されたバリデーター | すべての分岐が順に成功する。 | 最初に失敗したバリデーターエラー。 | upsertOrganizationMembersRoute、deleteOrganizationMemberRoute。 |
isSelf(path) | 認証結果と構成済みペイロードパス | トークンの identityId が対象 ID と一致する。 | 401/403。 | findOrganizationsForMemberRoute。 |
hasOrgRole(...) | 組織ストア、ロール構成、トークン、組織 ID パス | 呼び出し元が許可された構成済みロールを持つメンバーである。 | 400、401、403、または 500。 | ルートの組織ロール分岐。 |
hasOrgRoleSameOrAbove(...) | 組織ストア、ロール構成、トークン、組織/メンバーパス | 呼び出し元ランクが対象メンバーランク以上である。 | 400、401、403、または 500。 | deleteOrganizationMemberRoute。 |
hasOrgRoleAssignmentPermission(...) | 組織ストア、ロール構成、トークン、組織/メンバーパス | 呼び出し元が要求されたすべてのロールを割り当てられる。 | 400、401、403、422、または 500。 | upsertOrganizationMembersRoute。 |
hasOrgOwnerRemainingAfterMemberRemoval(...) | 組織ストア、ロール構成、組織/メンバーパス | 削除後も owner が残る。 | 400、403、409、または 500。 | deleteOrganizationMemberRoute。 |
hasOrgOwnerRemainingAfterMembersUpsert(...) | 組織ストア、ロール構成、組織/メンバーパス | upsert 後も owner が残る。 | 400、403、409、または 500。 | upsertOrganizationMembersRoute。 |
詳細
isAuthenticated()
実装
シグネチャ: isAuthenticated(): Validator。context.authenticate を呼び出します。organizationService はデフォルトで Bearer トランスポートを選択し、authMode が 'cookie' のときは Cookie トランスポートを選択します。
利用箇所: createOrganizationRoute、getOrganizationRoute、findOrganizationsRoute、updateOrganizationRoute、updateOrganizationAsAdminRoute、deleteOrganizationRoute、すべてのメンバールート、階層/アップロード/変更リクエストルート、getOrganizationFollowersRoute の先頭バリデーターです。
checkIdentityType(['admin'])
実装
シグネチャ: checkIdentityType(['admin']): Validator。db.identities と configuration.identity.typeIds.admin を読み取り、認証してアイデンティティを読み込み、構成済み管理者タイプを受け入れます。セットアップの欠落は 500、トークン失敗は 401、アイデンティティ/タイプ失敗は 403 です。
利用箇所: createOrganizationRoute、findOrganizationsRoute、updateOrganizationAsAdminRoute では認証直後に直接実行され、残りのすべての Organization ルートでは some(...) の管理者分岐になります。
some(...validators)
実装
シグネチャ: some(...args: Validator[]): Validator。管理者または代替条件の分岐コンビネーターです。メンバー一覧ルートは admin または isSelf を使用し、他のすべての一覧分岐は admin または Organization ロール条件を使用します。
利用箇所: getOrganizationRoute、updateOrganizationRoute、deleteOrganizationRoute、getOrganizationMemberRoleRoute、checkOrganizationMemberExistenceRoute、findOrganizationMembersRoute、upsertOrganizationMembersRoute、deleteOrganizationMemberRoute、findOrganizationsForMemberRoute、findOrganizationDescendantsRoute、アップロード/変更リクエストルート、getOrganizationFollowersRoute。
all(...validators)
実装
シグネチャ: all(...args: Validator[]): Validator。指定されたすべての分岐が順に成功することを必要とします。
利用箇所: upsertOrganizationMembersRoute の非管理者分岐を形成します: hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']) と hasOrgRoleAssignmentPermission(['params', 'requestParams', 'organizationId'], ['params', 'requestBody'])。deleteOrganizationMemberRoute では、同じ owner/admin ロール検査と、対象の requestParams.identityId を使う hasOrgRoleSameOrAbove を組み合わせます。
isSelf(path)
実装
シグネチャ: isSelf<T extends string>(identityIdPathInPayload: [T, ...T[]]): Validator。構成済みパス値が有効なトークンのアイデンティティ ID と一致することを必要とします。
利用箇所: findOrganizationsForMemberRoute は、非管理者の some(...) 分岐として isSelf(['params', 'requestParams', 'identityId']) を呼び出します。
hasOrgRole(...)
実装
シグネチャ: hasOrgRole(allowedRoles, organizationIdPathInPayload): Validator。すべての Organization 呼び出しは ['params', 'requestParams', 'organizationId'] を読み取ります。getOrganizationRoute は owner、admin、member を許可します。メンバーロール・存在確認・メンバー一覧・子孫・メンバー変更のロール検査は owner または admin を許可し、更新・削除・アップロード・変更リクエスト・フォロワーのロール検査は owner を許可します。db.organizations と configuration.organization.roles を必要とし、セットアップは 500、無効なトークンは 401、無効な ID は 400、検索/メンバーシップ/ロール失敗は 403 です。
利用箇所: ルートの組織ロール分岐。
hasOrgRoleSameOrAbove(...)
実装
シグネチャ: hasOrgRoleSameOrAbove(organizationIdPathInPayload, memberIdPathInPayload): Validator。デフォルトの昇順ロールキーは member、admin、owner です。構成/順序の不一致は 500、トークン失敗は 401、無効なパスは 400、許可されないメンバーシップ/ランクは 403 です。
利用箇所: deleteOrganizationMemberRoute は、all(...) 内で hasOrgRoleSameOrAbove(['params', 'requestParams', 'organizationId'], ['params', 'requestParams', 'identityId']) を呼び出します。
hasOrgRoleAssignmentPermission(...)
実装
シグネチャ: hasOrgRoleAssignmentPermission(organizationIdPathInPayload, membersPathInPayload): Validator。呼び出し元のロールランク以下の割り当てを許可します。メンバーの欠落/無効は 400、構成済み/要求ロールの無効は 422 または 500、ランク不足は 403 です。
利用箇所: upsertOrganizationMembersRoute は、all(...) 内で hasOrgRoleAssignmentPermission(['params', 'requestParams', 'organizationId'], ['params', 'requestBody']) を呼び出します。
hasOrgOwnerRemainingAfterMemberRemoval(...)
実装
シグネチャ: hasOrgOwnerRemainingAfterMemberRemoval(organizationIdPathInPayload, memberIdPathInPayload): Validator。削除後に構成済み owner が残らない場合は 409 を返します。無効なペイロードは 400、組織検索失敗は 403、セットアップ欠落は 500 です。
利用箇所: deleteOrganizationMemberRoute は、some(...) の後に hasOrgOwnerRemainingAfterMemberRemoval(['params', 'requestParams', 'organizationId'], ['params', 'requestParams', 'identityId']) を呼び出します。
hasOrgOwnerRemainingAfterMembersUpsert(...)
実装
シグネチャ: hasOrgOwnerRemainingAfterMembersUpsert(organizationIdPathInPayload, membersPathInPayload): Validator。要求されたメンバーロールをオーバーレイし、構成済み owner が残らない場合は 409 を返します。無効なペイロードは 400、組織検索失敗は 403、セットアップ欠落は 500 です。
利用箇所: upsertOrganizationMembersRoute は、some(...) の後に hasOrgOwnerRemainingAfterMembersUpsert(['params', 'requestParams', 'organizationId'], ['params', 'requestBody']) を呼び出します。