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

🪪 ユーザーバリデーター

ユーザーバリデーターは、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.profileId
  • payload.params.requestParams.profileId
  • payload.params.requestQuery.profileId
  • payload.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'])]
});

🔗 関連ドキュメント