✅ 通知バリデーター
通知ルートは、ローカルの所有権ラッパー 1 つと共通のバリデーターファクトリー 2 つを組み合わせます。どのルートも checkIdentityType は組み合わせません。
一覧
| バリデーター | 読み取る値 | 成功条件 | 失敗 / エラー | 利用箇所 |
|---|---|---|---|---|
isAuthenticated() | context.authenticate(payload) | 選択されたアダプターがリクエストトークンを受け入れます。 | 選択されたアダプターのエラーをそのまま伝播します。 | updateNotificationToReadRoute、findNotificationsRoute、updateNotificationToReadBatchRoute |
ownsNotification | context.authenticate、db.notifications、パスの通知 ID | 通知の receiverId がトークンのアイデンティティ ID と一致します。 | 400、401、403、または 500。 | updateNotificationToReadRoute |
isSelf(['params', 'requestParams', 'identityId']) | context.authenticate とルートパスのアイデンティティ ID | 対象 ID がトークンのアイデンティティ ID と一致します。 | 401 Invalid token、ID の欠落または不一致は 403。 | findNotificationsRoute、updateNotificationToReadBatchRoute |
詳細
isAuthenticated()
実装
シグネチャ: isAuthenticated(): Validator。返されるバリデーターは context.authenticate を読み取り、authenticate(payload) を待機します。このコンテキストエントリーがない場合、共通ファクトリーは Bearer アダプターにフォールバックします。返されたトークン情報を調べることもコレクションをクエリすることもないため、拒否は変更せずに伝播されます。
notificationService は、configuration.authMode が 'cookie' のときは Cookie アダプターを、それ以外では Bearer アダプターを提供します。これらのアダプターがリクエストの読み取りと認証 401 エラーの発生元です。通知サービスの設定 および共通の正規契約を参照してください。
利用箇所: updateNotificationToReadRoute、findNotificationsRoute、updateNotificationToReadBatchRoute。
ownsNotification
実装
ローカルの partial(ownsResource, ['notifications', ['receiverId']]) ラッパーです。updateNotificationToReadRoute は、得られたファクトリーを ownsNotification(['params', 'requestParams', 'notificationId']) として 2 番目に呼び出します。返されるバリデーターは context.authenticate(または Bearer フォールバック)を通じて再度認証し、有効なユーザーアクセストークンを必要とします。db.notifications を読み取り、正確なパス ID でドキュメントを読み込み、ドキュメントの receiverId を tokenInfo.identityId と比較します。
ユーザーアクセストークンではないトークンには 401 Invalid token、コレクションが存在しない場合には 500 Resource does not exist、パスに値がない場合には 400 Invalid resource ID をスローします。検索が拒否されると 403 Failed to fetch resource になります。ドキュメントがない場合も receiverId がないため 403 Invalid owner ID になり、受信者のないドキュメントも同じエラーになります。受信者が異なる場合は 403 Identity is not the owner of the resource です。正規の ownsResource 契約を参照してください。
isSelf(['params', 'requestParams', 'identityId'])
実装
findNotificationsRoute と updateNotificationToReadBatchRoute が 2 番目に呼び出す共通ファクトリーです。context.authenticate(または Bearer フォールバック)を通じて再度認証し、有効なユーザーアクセストークンを必要とします。渡された Ramda パスを通じて payload.params.requestParams.identityId を読み取り、tokenInfo.identityId と比較します。
ユーザーアクセストークンではないトークンには 401 Invalid token、パスに値がない場合には 403 Identity ID is required、対象が別のアイデンティティの場合には 403 Identity ID does not match をスローします。共通の正規契約を参照してください。
利用箇所: findNotificationsRoute および updateNotificationToReadBatchRoute。