✅ 注文バリデーター
注文ルートは、ローカルの ownsOrder 所有権バリデーターと、共通の認証・アクセス代替・アイデンティティタイプ・本人・組織ロールバリデーターを組み合わせます。SDK に validateOrderAccess のエクスポートはありません。
一覧
| バリデーター | 読み取る値 | 成功条件 | 失敗 / エラー | 利用箇所 |
|---|---|---|---|---|
isAuthenticated() | context.authenticate、またはデフォルト Bearer コンテキスト | 認証関数が解決する。 | 認証関数のエラー。デフォルト Bearer 認証は 401 をスロー。 | 作成、取得、検索、更新、削除、組織一覧 |
some(...) | 指定されたバリデーター関数 | 少なくとも 1 つの分岐が成功する。 | 最初に収集された NodeblocksError、または 500 Unknown error。 | 作成、取得、検索、更新、削除 |
checkIdentityType(['admin']) | db.identities、configuration.identity.typeIds、認証結果 | ユーザーアクセストークンのアイデンティティが構成済みの admin タイプ ID を持つ。 | 500、401、または 403。 | 作成、取得、検索、更新、削除 |
isSelf(...) | 認証結果と指定されたペイロードパス | 対象 ID がユーザートークンの identityId と一致する。 | 401 または 403。 | 作成、検索 |
ownsOrder | db.orders、認証結果、注文 ID のペイロードパス | 保存された注文の identityId がユーザートークンの identityId と一致する。 | 400、401、403、または 500。 | 取得、更新、削除 |
hasOrgRole(...) | db.organizations、configuration.organization.roles、認証結果、組織 ID のペイロードパス | 呼び出し元が構成済みの owner/admin/member ロールを持つメンバーである。 | 400、401、403、または 500。 | 組織一覧 |
詳細
isAuthenticated()
実装
シグネチャ: isAuthenticated(): Validator。指定される場合は context.authenticate(payload) を、そうでなければ getBearerTokenInfo(payload) を呼び出します。デフォルトは Authorization Bearer トークン、リクエストホスト/フィンガープリント/IP/ユーザーエージェント、configuration.authSecrets、configuration.checkIp(デフォルトは true)を読み取ります。選択された認証エラーは伝播します。デフォルトでは、無効または不適切なアクセストークン、あるいはトークンセキュリティチェックの失敗で 401 を生成します。 正規の契約 を参照してください。
利用箇所: このファクトリーは、createOrderRoute、getOrderRoute、findOrdersRoute、updateOrderRoute、deleteOrderRoute、findOrdersByOrganizationIdRoute のすべての注文ルートのバリデーター配列で先頭です。
some(...)
実装
シグネチャ: some(...args: Validator[]): Validator。isAuthenticated() の直後に置かれる直接バリデーターコンポーザーです。指定された 2 分岐を Promise.allSettled で並行実行し、どちらかが成功したときに成功します。両方が失敗すると、引数/結果順で最初に収集した NodeblocksError をスローします。NodeblocksError 以外の拒否は、ソース validator を持つ 500 Unknown error に置き換えられます。正規の契約を参照してください。
利用箇所: createOrderRoute、getOrderRoute、findOrdersRoute、updateOrderRoute、deleteOrderRoute。
checkIdentityType(['admin'])
実装
シグネチャ: checkIdentityType(['admin']): Validator。context.db.identities と context.configuration.identity.typeIds を必要とし、認証後にユーザーアクセストークンを要求し、トークンのアイデンティティを db.identities から取得して、その typeId を identity.typeIds.admin と比較します。コレクションまたは構成の欠落は 500、無効な非ユーザートークンは 401、アイデンティティ検索失敗・typeId 欠落・非管理者タイプは 403 です。正規の契約を参照してください。
利用箇所: createOrderRoute、getOrderRoute、findOrdersRoute、updateOrderRoute、deleteOrderRoute の最初の some(...) 分岐。
isSelf(...)
実装
シグネチャ: isSelf<T extends string>(identityIdPathInPayload: [T, ...T[]]): Validator。認証し、ユーザーアクセストークンを要求し、正確に指定されたペイロードパスの対象を読み取り、トークンの identityId と比較します。無効な非ユーザートークンは 401、対象アイデンティティ ID の欠落または不一致は 403 です。正規の契約を参照してください。
利用箇所: createOrderRoute では isSelf(['params', 'requestBody', 'identityId'])、findOrdersRoute では isSelf(['params', 'requestQuery', 'identityId']) として、2 番目の some(...) 分岐になります。
ownsOrder
実装
ownsOrder はローカルの partial(ownsResource, ['orders', ['identityId']]) エクスポートです。得られるバリデーターは認証してユーザーアクセストークンを要求し、context.db.orders を読み取り、指定ペイロードパスから orderId を読み取り、パブリックな id で注文を読み込んで、保存された identityId をトークンのアイデンティティ ID と比較します。無効なトークンは 401、注文コレクションなしは 500、注文 ID 欠落は 400、検索エラー・所有者 ID 欠落・所有権不一致は 403 です。共通の ownsResource 契約を参照してください。
利用箇所: getOrderRoute、updateOrderRoute、deleteOrderRoute は、2 番目の some(...) 分岐で ownsOrder(['params', 'requestParams', 'orderId']) を呼び出します。
hasOrgRole(...)
実装
シグネチャ: hasOrgRole(allowedRoles, organizationIdPathInPayload): Validator。context.db.organizations と context.configuration.organization.roles を必要とし、認証してユーザーアクセストークンを要求し、パスの組織 ID を読み取り、その組織を取得して、organization.members 内の呼び出し元を探し、メンバーのロールを対応する構成済み owner、admin、member ロール値と照合します。ストア/構成の欠落は 500、無効なトークンは 401、組織 ID 欠落は 400、検索失敗・メンバーシップなし・許可されないロールは 403 です。正規の契約を参照してください。
利用箇所: findOrdersByOrganizationIdRoute でのみ isAuthenticated() の直後に実行されます: hasOrgRole(['owner', 'admin', 'member'], ['params', 'requestParams', 'organizationId'])。