メインコンテンツまでスキップ
バージョン: 0.5.0 (最新)

💬 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'])]
});

🔗 関連ドキュメント