🪪 ユーザーバリデーター
ユーザーバリデーターは、Nodeblocksアプリケーションでユーザー関連操作のためのバリデーション関数を提供します。これらのバリデーターは、ユーザープロフィールとユーザー管理操作の適切なアクセス制御とデータバリデーションを確保します。
🎯 概要
ユーザーバリデーターは以下の目的で設計されています:
- ユーザープロフィールアクセスのバリデーション - 所有権と権限に基づいて
- 適切なユーザー管理の確保 - ロールベースのアクセス制御で
- 複数のアクセスパターンのサポート - (self、admin、user、guest)
- ユーザー固有のバリデーションロジックの処理 - セキュアな操作のため
- 再利用可能なバリデーションの提供 - ユーザーワークフロー用
📋 ユーザーバリデータータイプ
アクセス制御バリデーター
ユーザーリソースのユーザー権限をチェックするバリデーター。
🔧 利用可能なユーザーバリデーター
ownsProfile
認証されたユーザーアクセス用のプロフィール所有権バリデーター。
注: 内部的にプロフィールデータにusersコレクションを使用します。
目的: プロフィール所有者のみがプロフィールにアクセス/変更できることを確保します
パラメータ:
resourceIdPathInPayload: ペイロード内のprofileIdへのタプルパス(例:['requestParams', 'profileId'])
戻り値: void - 認証されたIDがプロフィールを所有している場合、通過します
スロー:
- NodeblocksError (401) メッセージ "Invalid token"
- NodeblocksError (500) メッセージ "Resource does not exist"
- NodeblocksError (400) メッセージ "Invalid resource ID"
- NodeblocksError (403) メッセージ "Failed to fetch resource"
- NodeblocksError (403) メッセージ "Invalid owner ID"
- NodeblocksError (403) メッセージ "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) メッセージ "App token is not valid" または "User token is not valid"
- NodeblocksError (400) メッセージ "must have identityId when creating a new profile"
- NodeblocksError (404) メッセージ "Profile not found"
- NodeblocksError (403) メッセージ "Profile has no identity"
- NodeblocksError (403) メッセージ "Identity is not authorized to access this 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.profileIdpayload.params.requestParams.profileIdpayload.params.requestQuery.profileIdpayload.params.requestBody.profileId
ユーザータイプ設定 (デフォルト):
{
admin: '100',
guest: '000',
user: '001'
}
アクセスロジック:
- App tokens: appIdが有効な場合、常に通過します
- User tokens:
'self'サブジェクトの場合:ownsProfile経由でID/プロフィール所有権をマッチします- ロールサブジェクトの場合: 設定されたtypeIdとID typeIdをマッチします
- アクセスが許可されるには、少なくとも1つのサブジェクトがマッチする必要があります
使用例:
import { validators } from '@nodeblocks/backend-sdk';
const { validateUserProfileAccess } = validators;
// Self access only
withRoute({
-- snip --
validators: [validateUserProfileAccess(['self'])]
});
// Self or admin access
withRoute({
-- snip --
validators: [validateUserProfileAccess(['self', 'admin'])]
});
// Admin only access
withRoute({
-- snip --
validators: [validateUserProfileAccess(['admin'])]
});