メインコンテンツまでスキップ
バージョン: 0.13.0 (Previous)

🏢 組織

Organization は、ソースで合成された HTTP 機能を通じて、組織、メンバーシップ、階層、変更リクエスト、ファイルアップロード、フォロワーを管理する SDK サービスを提供します。

はじめに

必須の identitiesorganizationsprofiles コレクションを指定して 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 検査を有効にします。

よくあるタスク

タスク開始地点契約
組織を作成または取得するcreateOrganizationFeaturecreateOrganizationFeaturegetOrganizationRoute
組織またはメンバーを一覧表示するfindOrganizationsRoutefindOrganizationsRoutefindOrganizationMembersRoute
メンバーを安全に管理するupsertOrganizationMembersRouteupsertOrganizationMembersRoute組織バリデーター
階層を扱うfindOrganizationDescendantsRoutefindOrganizationDescendantsRoutefindOrganizationsForMemberRoute
変更リクエストを送信または確認するcreateChangeRequestRoutecreateChangeRequestRoutefindChangeRequestsForOrganizationRoute
アップロード URL を生成するgetLogoUploadUrlRoutegetLogoUploadUrlRoutegetCertificateUploadUrlRoute

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"}}'

成功時にルートは正規化済み組織を返します。認証または管理者認可の失敗は、そのパイプラインより前で拒否されます。作成スキーマを参照してください。

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 ルートが使用するページネーション済みデータベースヘルパーを提供します。