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

🪪 組織バリデーター

組織バリデーターは、Nodeblocksアプリケーションで組織関連操作のバリデーション関数を提供します。これらのバリデーターは、組織管理とメンバーシップ操作の適切なアクセス制御とデータバリデーションを確保します。


🎯 概要

組織バリデーターは以下の目的で設計されています:

  • メンバーシップと権限に基づいて組織アクセスをバリデーション - アクセス制御を実装
  • ロールベースのアクセス制御で適切な組織管理を確保 - 権限管理を提供
  • 組織メンバーシップのバリデーションをサポート - メンバーシップチェックを実装
  • 安全な操作のための組織固有のバリデーションロジックを処理 - セキュリティを確保
  • 組織ワークフローの再利用可能なバリデーションを提供 - 共通パターンを提供

📋 組織バリデータータイプ

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

組織リソースのユーザー権限をチェックするバリデーター。


🔧 利用可能な組織バリデーター

hasOrgRole

ペイロード内の許可されたロールと組織IDに基づいて、アクセス制御のための組織メンバーロールをバリデーションします。

目的: 認証されたアイデンティティが対象組織で許可されたロールのいずれかを持っていることを確保

パラメータ:

  • allowedRoles: 許可された組織ロールのタプル(例:['admin', 'owner']
  • organizationIdPathInPayload: ペイロード内のorganizationIdへのタプルパス(例:['params', 'requestParams', 'organizationId']

戻り値: void - メンバーロールが許可されたロールと一致する場合に通過

スロー:

  • NodeblocksError (500) メッセージ "db.organizations is not set"
  • NodeblocksError (500) メッセージ "configuration.organization.roles is not set"
  • NodeblocksError (401) メッセージ "Invalid token"
  • NodeblocksError (400) メッセージ "Invalid organization ID"
  • NodeblocksError (403) メッセージ "Failed to fetch organization"
  • NodeblocksError (403) メッセージ "Identity is not a member of the organization"
  • NodeblocksError (403) メッセージ "Identity is not authorized to access this organization"

使用例:

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

const { hasOrgRole, some } = validators;

withRoute({
-- snip --
validators: [
some(
hasOrgRole(
['owner', 'admin', 'member'],
['params', 'requestParams', 'organizationId']
)
),
],
});

validateOrganizationAccess

許可されたサブジェクトとトークン情報に基づいて組織アクセスをバリデーションします。

非推奨

このバリデーターは非推奨です。
代替: hasOrgRole

目的: ユーザーが適切な組織メンバーシップと権限を持っていることを確保

パラメータ:

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

戻り値: void - ユーザーが適切な権限を持っている場合に通過

スロー:

  • NodeblocksError (401) メッセージ "App token is not valid"
  • NodeblocksError (401) メッセージ "Identity token is not valid"
  • NodeblocksError (404) メッセージ "Organization not found"
  • NodeblocksError (403) メッセージ "Organization has no members"
  • NodeblocksError (403) メッセージ "Identity does not belong to this organization"
  • NodeblocksError (403) メッセージ "Identity is not authorized to access this organization"
  • NodeblocksError (401) メッセージ "Token does not have a valid access type"

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

  • 'admin' - 管理者アクセス
  • 'member' - 組織メンバーアクセス
  • 'owner' - 組織オーナーアクセス

組織IDソース(順にチェック):

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

ユーザーロール設定(デフォルト):

{
admin: 'admin',
member: 'member',
owner: 'owner'
}

アクセスロジック:

  • アプリトークン: appIdが有効な場合は常に通過
  • ユーザートークン:
    • 組織が存在することを確認
    • 組織にユーザーがいることを確認
    • ユーザーが組織に属していることを確認
    • ユーザーロールが許可されたサブジェクトと一致することを確認
    • アクセスを許可するには、少なくとも1つのサブジェクトが一致する必要がある

使用例:

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

const { validateOrganizationAccess } = validators;

// 組織メンバーアクセス
withRoute({
-- snip --
validators: [validateOrganizationAccess(['member'])]
});

// 組織管理者またはオーナーアクセス
withRoute({
-- snip --
validators: [validateOrganizationAccess(['admin', 'owner'])]
});

// 任意の組織メンバーアクセス
withRoute({
-- snip --
validators: [validateOrganizationAccess(['admin', 'member', 'owner'])]
});

🔗 関連ドキュメント