💬 チャットバリデーターブロック
チャットバリデーターブロックは、Nodeblocksアプリケーションにおけるチャット関連操作のための検証機能を提供します。これらのバリデーターは、チャットチャンネル、メッセージ、会話のための適切なアクセス制御とデータ検証を確保します。
🎯 概要
チャットバリデーターブロックは以下を目的として設計されています:
- 所有権と権限に基づくチャンネルアクセスの検証
- チャット操作のための適切なメッセージアクセスの確保
- 複数のアクセスパターン(所有者、管理者、メンバー)のサポート
- 安全な操作のためのチャット固有の検証ロジックの処理
- チャットワークフローのための再利用可能な検証の提供
📋 チャットバリデーター種類
アクセス制御バリデーター
チャットリソースに対するユーザー権限をチェックするバリデーター。
🔧 利用可能なチャットバリデーター
validateChannelAccess
許可されたサブジェクトとトークン情報に基づいてチャンネルアクセスを検証します。
目的: ユーザーが適切なチャンネル所有権と権限を持つことを確保
パラメータ:
allowedSubjects
:string[]
- 許可されたユーザータイプ/サブジェクトの配列authenticate
:Authenticator
- 認証機能(オプション、デフォルトはgetBearerTokenInfo)payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含む
戻り値: void
- ユーザーが適切な権限を持つ場合は通過
スロー:
- NodeblocksError (401) メッセージ「App token is not valid」または「User token is not valid」(無効なトークン用)
- NodeblocksError (400) メッセージ「must have ownerId when creating a new channel」(新規チャンネルでのownerId不足用)
- NodeblocksError (403) メッセージ「Channel has no owner」(オーナーのないチャンネル用)
- NodeblocksError (403) メッセージ「User is not authorized to access this channel」(不正アクセス用)
- NodeblocksError (404) メッセージ「Channel not found」(チャンネルが存在しない場合)
- NodeblocksError (401) メッセージ「Token does not have a valid access type」(無効なトークンタイプ用)
サポートされるサブジェクト:
'owner'
- チャンネル所有者アクセス
チャンネルIDソース(順序で確認):
payload.context.data.channelId
payload.params.requestParams.channelId
payload.params.requestQuery.channelId
payload.params.requestBody.channelId
オーナーIDソース(新規チャンネル用):
payload.context.data.ownerId
payload.params.requestBody.ownerId
使用方法:
import { validators } from '@nodeblocks/backend-sdk';
const { validateChannelAccess } = validators;
// チャンネル所有者アクセス
compose(validateChannelAccess(['owner']), channelHandler);
// チャンネル所有者または管理者アクセス
compose(validateChannelAccess(['owner', 'admin']), channelHandler);
validateMessageAccess
許可されたサブジェクトとトークン情報に基づいてメッセージアクセスを検証します。
目的: ユーザーが適切なメッセージアクセス権限を持つことを確保
パラメータ:
allowedSubjects
:string[]
- 許可されたユーザータイプ/サブジェクトの配列authenticate
:Authenticator
- 認証機能(オプション、デフォルトはgetBearerTokenInfo)payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含む
戻り値: void
- ユーザーが適切な権限を持つ場合は通過
スロー:
- NodeblocksError (401) メッセージ「App token is not valid」または「User token is not valid」(無効なトークン用)
- NodeblocksError (404) メッセージ「Message not found」(メッセージが存在しない場合)
- NodeblocksError (403) メッセージ「User is not authorized to access this message」(不正アクセス用)
- NodeblocksError (401) メッセージ「Token does not have a valid access type」(無効なトークンタイプ用)
サポートされるサブジェクト:
'sender'
- メッセージ送信者アクセス'channelMember'
- チャンネルメンバーアクセス
メッセージIDソース(順序で確認):
payload.context.data.messageId
payload.params.requestParams.messageId
payload.params.requestQuery.messageId
payload.params.requestBody.messageId
使用方法:
import { validators } from '@nodeblocks/backend-sdk';
const { validateMessageAccess } = validators;
// メッセージ送信者アクセス
compose(validateMessageAccess(['sender']), messageHandler);
// チャンネルメンバーによるメッセージアクセス
compose(validateMessageAccess(['channelMember']), messageHandler);
// 送信者またはチャンネルメンバーアクセス
compose(validateMessageAccess(['sender', 'channelMember']), messageHandler);
📋 検証フロー
チャンネルアクセス検証
- トークンの有効性を確認
- チャンネルの存在を検証
- チャンネル所有権を確認
- ユーザーアクセス権限を評価
メッセージアクセス検証
- トークンの有効性を確認
- メッセージの存在を検証
- メッセージ送信者またはチャンネルメンバーシップを確認
- アクセス権限を評価
アクセス制御パターン
チャットバリデーターは階層的アクセスシステムをサポートします:
- Owner: 完全なチャンネル制御
- Member: チャンネル参加とメッセージアクセス
- Sender: 自身のメッセージに対する制御
エラー処理
すべての検証エラーは適切なHTTPステータスコードとメッセージを含みます。
🔗 関連ドキュメント
- チャットスキーマブロック - チャットデータ検証と契約
- チャットハンドラーブロック - チャットビジネスロジック関数
- チャットルートブロック - チャットHTTPエンドポイント定義
- チャットフィーチャーブロック - チャットコンポーズ機能