🔧 共通バリデーターブロック
共通バリデーターブロックは、Nodeblocksアプリケーションにおいて異なるドメインで使用できる汎用検証機能を提供します。これらのバリデーターは、任意のタイプのリソースに対する適切なパラメータ検証、認証、アクセス制御を確保します。
🎯 概要
共通バリデーターブロックは以下を目的として設計されています:
- ドメイン間で再利用するための汎用検証機能の提供
- 任意のリソースのための適切な認証と認可の確保
- 共通パラメータタイプ(UUID、数値、必須フィールド)の検証
- 役割ベースと自己アクセスパターンによる柔軟なアクセス制御のサポート
- 一貫した方法での横断的関心事の処理
📋 共通バリデーター種類
認証バリデーター
任意のリソースの認証と認可をチェックするバリデーター。
パラメータバリデーター
パラメータフォーマットと存在をチェックするバリデーター。
🔧 利用可能な共通バリデーター
validateResourceAccess
許可されたサブジェクトとトークンタイプに基づいてリソースアクセスを検証します。
目的: 任意のリソースタイプのための汎用アクセス制御バリデーター
パラメータ:
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 (403) メッセージ「User is not authorized to access this resource」(認可されていないアクセス)
- NodeblocksError (401) メッセージ「Token does not have a valid access type」(無効なトークンタイプ)
サポートされるサブジェクト:
'self'
- ユーザーが自分のリソースにアクセス可能(IDベースマッチング)'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'
サブジェクトの場合: ユーザーIDとリソースユーザーIDをマッチング- 役割サブジェクトの場合: ユーザーのtypeIdと設定されたtypeIdをマッチング
- アクセスが許可されるには少なくとも1つのサブジェクトがマッチする必要がある
使用方法:
import { validators } from '@nodeblocks/backend-sdk';
const { validateResourceAccess } = validators;
// 管理者のみアクセス
compose(validateResourceAccess(['admin']), adminOnlyHandler);
// 自己または管理者アクセス
compose(validateResourceAccess(['self', 'admin']), resourceHandler);
// 複数役割アクセス
compose(validateResourceAccess(['user', 'admin']), multiRoleHandler);
requireParam
特定のパラメータが存在することを要求するファクトリ関数。
目的: パラメータ要求バリデーターを作成
使用方法:
import { validators } from '@nodeblocks/backend-sdk';
const { requireParam } = validators;
// 必須パラメータの検証
const requireUserId = requireParam('userId');
compose(requireUserId, userHandler);
isUUID
有効なUUID形式を確認するファクトリ関数。
目的: UUIDフォーマットバリデーターを作成
使用方法:
import { validators } from '@nodeblocks/backend-sdk';
const { isUUID } = validators;
// UUID形式の検証
const validateUUID = isUUID('resourceId');
compose(validateUUID, resourceHandler);
isNumber
有効な数値形式を確認するファクトリ関数。
目的: 数値フォーマットバリデーターを作成
使用方法:
import { validators } from '@nodeblocks/backend-sdk';
const { isNumber } = validators;
// 数値形式の検証
const validateNumber = isNumber('quantity');
compose(validateNumber, quantityHandler);
🔗 関連ドキュメント
- 共通スキーマブロック - 共通データ検証と契約
- ユーザーバリデーターブロック - ユーザー固有検証機能
- 認証バリデーターブロック - 認証固有検証機能