🏢 組織
Organization は、ソースで合成された HTTP 機能を通じて、組織、メンバーシップ、階層、変更リクエスト、ファイルアップロード、フォロワーを管理する SDK サービスを提供します。
はじめに
必須の identities、organizations、profiles コレクションを指定して organizationService をマウントします。JSON リクエスト本文には express.json() を使用します。authMode が 'cookie' の場合は、サービスをマウントする前に cookie-parser を登録してください。
import express from 'express';
import cookieParser from 'cookie-parser';
import {services} from '@nodeblocks/backend-sdk';
const app = express();
app.use(express.json());
app.use(cookieParser()); // authMode: 'cookie' の場合のみ必須。
app.use('/api', services.organizationService(
{identities, organizations, profiles},
{
authSecrets: {
authEncSecret: process.env.AUTH_ENC_SECRET!,
authSignSecret: process.env.AUTH_SIGN_SECRET!,
},
authMode: 'bearer',
identity: {typeIds: {admin: 'identity-type-admin', guest: 'identity-type-guest', regular: 'identity-type-regular'}},
organization: {roles: {owner: 'owner', admin: 'admin', member: 'member'}},
},
{fileStorageDriver},
));
| 構成 | デフォルト / ソース動作 | 効果 |
|---|---|---|
authSecrets.authEncSecret / authSecrets.authSignSecret | 必須。実行時デフォルトなし | サービス認証の構成。 |
authMode | 省略時は 'bearer' | Bearer ヘッダー認証または Cookie 認証を選択します。 |
identity.typeIds | 指定時は変更せずバリデーターに渡される | 構成済みルートが呼び出すアイデンティティタイプ検査を有効にします。 |
organization.roles | 指定時は変更せずバリデーターに渡される | 構成済みルートが呼び出すロールベースの Organization 検査を有効にします。 |
よくあるタスク
| タスク | 開始地点 | 契約 |
|---|---|---|
| 組織を作成または取得する | createOrganizationFeature | createOrganizationFeature と getOrganizationRoute |
| 組織またはメンバーを一覧表示する | findOrganizationsRoute | findOrganizationsRoute と findOrganizationMembersRoute |
| メンバーを安全に管理する | upsertOrganizationMembersRoute | upsertOrganizationMembersRoute と 組織バリデーター |
| 階層を扱う | findOrganizationDescendantsRoute | findOrganizationDescendantsRoute と findOrganizationsForMemberRoute |
| 変更リクエストを送信または確認する | createChangeRequestRoute | createChangeRequestRoute と findChangeRequestsForOrganizationRoute |
| アップロード URL を生成する | getLogoUploadUrlRoute | getLogoUploadUrlRoute と getCertificateUploadUrlRoute |
Bearer HTTP ワークフロー
認証済み管理者 Bearer トークンで、createOrganizationRoute から組織を作成します。このフラグメントには、上記のサービスマウントと有効な管理者アイデンティティが必要です。
export API_BASE_URL='https://api.example.test/api'
export ACCESS_TOKEN='replace-with-a-valid-access-token'
curl --request POST "$API_BASE_URL/organizations" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"ownerId":"identity-owner-001","organization":{"name":"Example organization","description":"Example description","contact_email":"org@example.test"}}'
成功時にルートは正規化済み組織を返します。認証または管理者認可の失敗は、そのパイプラインより前で拒否されます。作成スキーマを参照してください。
Cookie HTTP ワークフロー
authMode: 'cookie' を設定し、cookie-parser を登録します。保護されたルートは、構成済み Cookie トランスポートでアクセストークンを読み取ります。たとえば、メンバーはホストアプリケーションが提供する Cookie を使って組織をリクエストできます。
export API_BASE_URL='https://api.example.test/api'
export ACCESS_COOKIE='accessToken=replace-with-a-valid-access-token'
curl "$API_BASE_URL/organizations/org-001" --header "Cookie: $ACCESS_COOKIE"
ルートのアクセス規則は getOrganizationRoute、パス契約は getOrganizationSchema に記載されています。
カスタム機能の合成
機能は Express ミドルウェアではなく SDK コンポーザーです。ホストは、ルートが必要とする同じ実行時コンテキストを提供する場合、単一のパブリック機能をサービスルーターに合成できます。
import {partial} from 'ramda';
import {features, primitives, utils} from '@nodeblocks/backend-sdk';
app.use('/api', primitives.defService(partial(features.getOrganizationFeatures, [{
authenticate: utils.getBearerTokenInfo,
configuration,
dataStores: {identities, organizations, profiles},
fileStorageDriver,
}])));
このフラグメントには、ホストの認証アダプターとルートで使用されるコレクションが必要です。すべての Organization エンドポイントが必要な場合は organizationService を使用してください。
リファレンスマップ
| ページ | 目的 |
|---|---|
| ブロック | 再利用可能な組織操作、定数、エラー。 |
| 機能 | スキーマからルートへの SDK 合成。 |
| ハンドラー | パイプラインターミネーター。 |
| ルート | エンドポイントとレスポンスの契約。 |
| スキーマ | フィールドレベルの検証契約。 |
| バリデーター | 認証、ロール、ランク、所有権のガード。 |
関連モジュール
Organization サービス はサービスレベルのリファレンスです。Authentication ユーティリティ と Cookie ユーティリティ は選択されたトークン転送を提供します。ファイルストレージブロック は委譲されたアップロード/ダウンロード操作を提供し、Mongo ブロック は Organization ルートが使用するページネーション済みデータベースヘルパーを提供します。