💬 Chat バリデーターブロック
Chat 検証ブロックは、NodeBlocks アプリケーションにおけるチャット関連操作のための検証関数を提供します。これらの検証機能は、チャットチャンネル、メッセージ、会話のための適切なアクセス制御とデータ検証を確保します。
🎯 概要
Chat バリデーターブロックは次のことを目的として設計されています:
- チャンネルアクセスを所有権と権限に基づいて検証する
- チャット操作のための適切なメッセージアクセスを確保する
- 複数のアクセスパターンをサポートする(所有者、管理者、メンバー)
- 安全な操作のためのチャット固有の検証ロジックを処理する
- チャットワークフロー用の再利用可能な検証を提供する
📋 Chat バリデータータイプ
アクセス制御バリデーター
チャットリソースのユーザー権限をチェックする検証機能。
🔧 利用可能なチャットバリデーター
hasSubscription
指定されたチャンネルに ID がサブスクライブされていることを検証します。
目的: 関連リソースにアクセスする前にユーザーがチャンネルにサブスクライブされていることを確保します
パラメーター:
channelIdPathInPayload
: payload 内のchannelId
へのタプルパスsubscribedIdPathInPayload
(オプション): payload 内のsubscribedId
へのタプルパス;デフォルトは認証された ID
戻り値: void - サブスクリプションが存在する場合に通過します
スロー:
- NodeblocksError (500) with message "db.subscriptions が設定されていません"
- NodeblocksError (401) with message "無効なトークン"
- NodeblocksError (400) with message "無効なチャンネル ID"
- NodeblocksError (400) with message "無効なサブスクライブ ID"
- NodeblocksError (500) with message "サブスクリプションの取得に失敗しました"
- NodeblocksError (403) with message "ID はチャンネルにサブスクライブされていません"
使用例:
import { validators } from '@nodeblocks/backend-sdk';
const { hasSubscription } = validators;
withRoute({
-- snip --
validators: [
hasSubscription(['requestParams', 'channelId'])
]
});
ownsSubscription
認証されたユーザーアクセスのためのサブスクリプション所有権検証機能。
目的: サブスクリプション所有者(サブスクライブされた ID)のみがサブスクリプションを変更できることを確保します
パラメーター:
resourceIdPathInPayload
: payload 内のsubscriptionId
へのタプルパス(例:['requestParams', 'subscriptionId']
)
戻り値: void - 認証された ID がサブスクリプションを所有する場合に通過します
スロー:
- NodeblocksError (401) with message "無効なトークン"
- NodeblocksError (500) with message "リソースが存在しません"
- NodeblocksError (400) with message "無効なリソース ID"
- NodeblocksError (403) with message "リソースの取得に失敗しました"
- NodeblocksError (403) with message "無効な所有者 ID"
- NodeblocksError (403) with message "ID はリソースの所有者ではありません"
使用例:
import { validators } from '@nodeblocks/backend-sdk';
const { ownsSubscription } = validators;
withRoute({
-- snip --
validators: [
ownsSubscription(['requestParams', 'subscriptionId'])
]
});
ownsChannel
認証されたユーザーアクセスのためのチャットチャンネル所有権検証機能。
目的: チャンネル所有者のみがチャンネルにアクセス/変更できることを確保します
パラメーター:
resourceIdPathInPayload
: payload 内のchannelId
へのタプルパス(例:['requestParams', 'channelId']
)
戻り値: void - 認証された ID がチャンネルを所有する場合に通過します
スロー:
- NodeblocksError (401) with message "無効なトークン"
- NodeblocksError (500) with message "リソースが存在しません"
- NodeblocksError (400) with message "無効なリソース ID"
- NodeblocksError (403) with message "リソースの取得に失敗しました"
- NodeblocksError (403) with message "無効な所有者 ID"
- NodeblocksError (403) with message "ID はリソースの所有者ではありません"
使用例:
import { validators } from '@nodeblocks/backend-sdk';
const { ownsChannel } = validators;
withRoute({
-- snip --
validators: [
ownsChannel(['requestParams', 'channelId'])
]
});
ownsMessage
認証されたユーザーアクセスのためのチャットメッセージ所有権検証機能。
目的: メッセージ送信者のみがメッセージにアクセス/変更できることを確保します
パラメーター:
resourceIdPathInPayload
: payload 内のmessageId
へのタプルパス(例:['requestParams', 'messageId']
)
戻り値: void - 認証された ID が送信者である場合に通過します
スロー:
- NodeblocksError (401) with message "無効なトークン"
- NodeblocksError (500) with message "リソースが存在しません"
- NodeblocksError (400) with message "無効なリソース ID"
- NodeblocksError (403) with message "リソースの取得に失敗しました"
- NodeblocksError (403) with message "無効な所有者 ID"
- NodeblocksError (403) with message "ID はリソースの所有者ではありません"
使用例:
import { validators } from '@nodeblocks/backend-sdk';
const { ownsMessage } = validators;
withRoute({
-- snip --
validators: [
ownsMessage(['requestParams', 'messageId'])
]
});
validateChannelAccess
許可されたサブジェクトとトークン情報に基づいてチャンネルアクセスを検証します。
このバリデーターは非推奨です。
置き換え: ownsChannel
。
目的: ユーザーが適切なチャンネル所有権と権限を持っていることを確保します
パラメーター:
allowedSubjects
:string[]
- 許可されたユーザータイプ/サブジェクトの配列authenticate
:Authenticator
- 認証関数(オプション、デフォルトは getBearerTokenInfo)payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含む
戻り値: void
- ユーザーが適切な権限を持っている場合に通過します
スロー:
- NodeblocksError (401) with message "アプリトークンが無効です" または "ユーザートークンが無効です"(無効なトークンの場合)
- NodeblocksError (400) with message "新しいチャンネルを作成する場合は ownerId が必要です"(新しいチャンネルで ownerId が不足している場合)
- NodeblocksError (403) with message "チャンネルに所有者がありません"(所有者がいないチャンネルの場合)
- NodeblocksError (403) with message "このチャンネルにアクセスする権限がありません"(不正アクセス)
- NodeblocksError (404) with message "チャンネルが見つかりません"(チャンネルが存在しない場合)
- NodeblocksError (401) with message "トークンに有効なアクセスタイプがありません"(無効なトークンタイプの場合)
サポートされているサブジェクト:
'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;
withRoute({
-- snip --
validators: [validateChannelAccess(['owner'])]
});
withRoute({
-- snip --
validators: [validateChannelAccess(['owner', 'admin'])]
});
validateMessageAccess
許可されたサブジェクトとトークン情報に基づいてメッセージアクセスを検証します。
このバリデーターは非推奨です。
置き換え: ownsMessage
。
目的: ユーザーが適切なメッセージ所有権と権限を持っていることを確保します
パラメーター:
allowedSubjects
:string[]
- 許可されたユーザータイプ/サブジェクトの配列(例: ['owner'])authenticate
:Authenticator
- 認証関数(オプション、デフォルトは getBearerTokenInfo)payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含む
戻り値: void
- ユーザーが適切な権限を持っている場合に通過します
スロー:
- NodeblocksError (401) with message "アプリトークンが無効です" または "ユーザートークンが無効です"(無効なトークンの場合)
- NodeblocksError (400) with message "新しいメッセージを作成する場合は senderId が必要です"(新しいメッセージで senderId が不足している場合)
- NodeblocksError (403) with message "メッセージに送信者がありません"(送信者がいないメッセージの場合)
- NodeblocksError (403) with message "このメッセージにアクセスする権限がありません"(不正アクセス)
- NodeblocksError (404) with message "メッセージが見つかりません"(メッセージが存在しない場合)
- NodeblocksError (401) with message "トークンに有効なアクセスタイプがありません"(無効なトークンタイプの場合)
サポートされているサブジェクト:
'owner'
- メッセージ送信者アクセス
メッセージ ID ソース(チェック順):
payload.context.data.messageId
payload.params.requestParams.messageId
payload.params.requestQuery.messageId
payload.params.requestBody.messageId
送信者 ID ソース(新しいメッセージの場合):
payload.context.data.senderId
payload.params.requestBody.senderId
使用例:
import { validators } from '@nodeblocks/backend-sdk';
const { validateMessageAccess } = validators;
// メッセージ送信者アクセス
withRoute({
-- snip --
validators: [validateMessageAccess(['owner'])]
});
// メッセージ送信者または管理者アクセス
withRoute({
-- snip --
validators: [validateMessageAccess(['owner', 'admin'])]
});
🔗 関連ドキュメント
- Chat スキーマブロック - チャットデータ検証とコントラクト
- Chat ハンドラーブロック - チャットビジネスロジック関数
- Chat ルートブロック - チャット HTTP エンドポイント定義
- Chat 機能ブロック - チャット構成機能