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

👤 ユーザーバリデーターブロック

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


🎯 概要

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

  • 所有権と権限に基づくユーザープロフィールアクセスの検証
  • 役割ベースアクセス制御による適切なユーザー管理の確保
  • 複数のアクセスパターンのサポート(self、admin、user、guest)
  • 安全な操作のためのユーザー固有の検証ロジックの処理
  • ユーザーワークフローのための再利用可能な検証の提供

📋 ユーザーバリデーター種類

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

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


🔧 利用可能なユーザーバリデーター

validateUserProfileAccess

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

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

パラメータ:

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

戻り値: void - ユーザーが適切な権限を持つ場合は通過

例外:

  • NodeblocksError (401) メッセージ「App token is not valid」または「User token is not valid」(無効なトークン)
  • NodeblocksError (401) メッセージ「Identity not found」(ユーザーアイデンティティが存在しない場合)
  • NodeblocksError (404) メッセージ「User profile not found」(ユーザープロフィールが見つからない場合)
  • NodeblocksError (403) メッセージ「User is not authorized to access this user profile」(認可されていないアクセス)
  • NodeblocksError (401) メッセージ「Token does not have a valid access type」(無効なトークンタイプ)

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

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

ユーザープロフィールIDソース(順序でチェック):

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

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

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

アクセスロジック:

  • アプリトークン: appIdが有効であれば常に通過
  • ユーザートークン:
    • 'self'サブジェクトの場合: ユーザーメールとプロフィールメールをマッチング
    • 役割サブジェクトの場合: ユーザーのtypeIdと設定されたtypeIdをマッチング
    • アクセスが許可されるには少なくとも1つのサブジェクトがマッチする必要がある

使用方法:

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

const { validateUserProfileAccess } = validators;

// 自己アクセスのみ
compose(validateUserProfileAccess(['self']), userProfileHandler);

// 自己または管理者アクセス
compose(validateUserProfileAccess(['self', 'admin']), userProfileHandler);

// 管理者のみアクセス
compose(validateUserProfileAccess(['admin']), adminUserHandler);

🔗 関連ドキュメント