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

🏢 Organization バリデーターブロック

Organization バリデーターブロックは、NodeBlocks アプリケーションにおける組織関連操作のための検証関数を提供します。これらのバリデーターは、組織管理とメンバーシップ操作のための適切なアクセス制御とデータ検証を確保します。


🎯 概要

Organization バリデーターブロックは次のことを目的として設計されています:

  • メンバーシップと権限に基づいて組織アクセスを検証
  • 役割ベースアクセス制御で適切な組織管理を確保
  • 組織メンバーシップ検証をサポート
  • 安全な操作のための組織固有の検証ロジックを処理
  • 組織ワークフロー用の再利用可能な検証を提供

📋 Organization バリデータータイプ

アクセスコントロールバリデーター

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


🔧 利用可能な Organization バリデーター

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'])]
});

🔗 関連ドキュメント