👤 ユーザーバリデーターブロック
ユーザーバリデーターブロックは、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);
🔗 関連ドキュメント
- ユーザースキーマブロック - ユーザーデータ検証と契約
- ユーザーハンドラーブロック - ユーザービジネスロジック機能
- ユーザールートブロック - ユーザーHTTPエンドポイント定義
- ユーザーフィーチャーブロック - ユーザーコンポーズド機能