メインコンテンツまでスキップ
バージョン: 0.4.2

💬 チャットバリデーターブロック

チャットバリデーターブロックは、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);

📋 検証フロー

チャンネルアクセス検証

  1. トークンの有効性を確認
  2. チャンネルの存在を検証
  3. チャンネル所有権を確認
  4. ユーザーアクセス権限を評価

メッセージアクセス検証

  1. トークンの有効性を確認
  2. メッセージの存在を検証
  3. メッセージ送信者またはチャンネルメンバーシップを確認
  4. アクセス権限を評価

アクセス制御パターン

チャットバリデーターは階層的アクセスシステムをサポートします:

  • Owner: 完全なチャンネル制御
  • Member: チャンネル参加とメッセージアクセス
  • Sender: 自身のメッセージに対する制御

エラー処理

すべての検証エラーは適切なHTTPステータスコードとメッセージを含みます。


🔗 関連ドキュメント