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

👤 User バリデーターブロック

User バリデーターブロックは、Nodeblocks アプリケーションにおけるユーザー関連操作のための検証関数を提供します。これらのバリデーターは、ユーザー プロファイルとユーザー管理操作のための適切なアクセス制御とデータ検証を確保します。


🎯 概要

User バリデーターブロックは以下を目的として設計されています:

  • 所有権と権限に基づいてユーザー プロファイルアクセスを検証
  • ロールベースのアクセス制御で適切なユーザー管理を確保
  • 複数のアクセスパターンをサポート (self, admin, user, guest)
  • セキュアな操作のためのユーザー固有の検証ロジックを処理
  • ユーザー ワークフローで再利用可能な検証を提供

📋 User バリデータータイプ

アクセス制御バリデーター

ユーザー リソースに対するユーザー権限をチェックするバリデーター。


🔧 利用可能な User バリデーター

ownsProfile

認証されたユーザーアクセス用のプロファイル所有権バリデーター。

注意: 内部的にプロファイル データ用に users コレクションを使用します。

目的: プロファイル所有者のみがプロファイルにアクセス/変更できることを確保

パラメータ:

  • resourceIdPathInPayload: ペイロード内の profileId へのタプルパス (例: ['requestParams', 'profileId'])

返却値: void - 認証されたアイデンティティがプロファイルを所有する場合に通過

スロー:

  • NodeblocksError (401) with message "Invalid token"
  • NodeblocksError (500) with message "Resource does not exist"
  • NodeblocksError (400) with message "Invalid resource ID"
  • NodeblocksError (403) with message "Failed to fetch resource"
  • NodeblocksError (403) with message "Invalid owner ID"
  • NodeblocksError (403) with message "Identity is not the owner of the resource"

使用法:

import { validators } from '@nodeblocks/backend-sdk';

const { ownsProfile } = validators;

withRoute({
-- snip --
validators: [
ownsProfile(['requestParams', 'profileId'])
]
});

validateUserProfileAccess

許可されたサブジェクトとトークン情報に基づいてユーザー プロファイルアクセスを検証します。

廃止予定

このバリデーターは廃止予定です。
置き換え: ownsProfile

目的: ユーザーが自分のプロファイルのみにアクセスできるか、適切な権限を持っていることを確保

パラメータ:

  • allowedSubjects: string[] - 許可されたユーザータイプ/サブジェクトの配列
  • authenticate: Authenticator - 認証関数 (オプション、デフォルトは getBearerTokenInfo)
  • payload: RouteHandlerPayload - リクエストコンテキストとデータを格納

返却値: void - ユーザーが適切な権限を持っている場合に通過

スロー:

  • NodeblocksError (401) with message "App token is not valid" or "User token is not valid"
  • NodeblocksError (400) with message "must have identityId when creating a new profile"
  • NodeblocksError (404) with message "Profile not found"
  • NodeblocksError (403) with message "Profile has no identity"
  • NodeblocksError (403) with message "Identity is not authorized to access this profile"
  • NodeblocksError (401) with message "Token does not have a valid access type"

サポートされたサブジェクト:

  • 'self' - ユーザーは自分のプロファイルにアクセス可能 (メールベースのマッチング)
  • 'admin' - 管理者アクセス (typeId: '100')
  • 'user' - 通常ユーザーアクセス (typeId: '001')
  • 'guest' - ゲストアクセス (typeId: '000')

User プロファイル ID ソース (チェック順):

  • payload.context.data.profileId
  • payload.params.requestParams.profileId
  • payload.params.requestQuery.profileId
  • payload.params.requestBody.profileId

ユーザータイプ設定 (デフォルト):

{
admin: '100',
guest: '000',
user: '001'
}

アクセスロジック:

  • アプリトークン: appId が有効な場合、常に通過
  • ユーザートークン:
    • 'self' サブジェクトの場合: ownsProfile を介してアイデンティティ/プロファイル所有権をマッチング
    • ロール サブジェクトの場合: アイデンティティ typeId と設定された typeId をマッチング
    • アクセスが許可されるために、少なくとも 1 つのサブジェクトが一致する必要がある

使用法:

import { validators } from '@nodeblocks/backend-sdk';

const { validateUserProfileAccess } = validators;

// 自己アクセス専用
withRoute({
-- snip --
validators: [validateUserProfileAccess(['self'])]
});

// 自己または管理者アクセス
withRoute({
-- snip --
validators: [validateUserProfileAccess(['self', 'admin'])]
});

// 管理者専用アクセス
withRoute({
-- snip --
validators: [validateUserProfileAccess(['admin'])]
});

🔗 関連ドキュメント