🪪 組織バリデーター
組織バリデーターは、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.organizationIdpayload.params.requestParams.organizationIdpayload.params.requestQuery.organizationIdpayload.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'])]
});