mcpField
C
convex-tenants

convex-tenants

github.com/dbjpanda開発11192 回インストール24 週間前に更新
リポジトリ

convex-tenants について

Convexのマルチテナントアプリで組織、チーム、メンバー、認可を管理するパッケージです。設定可能なAPIと任意のReactコンポーネントを備え、権限管理には兄弟コンポーネントの`@djpanda/convex-authz`を使います。

主な機能

  1. 01組織とチームの管理
  2. 02メンバーと招待のAPI
  3. 03柔軟なロールと権限マッピング
  4. 04組み込みReactコンポーネントとフック

活用シーン

  1. 01Convexアプリへの組織機能の追加
  2. 02チームメンバーと招待の管理
  3. 03組織切り替え画面の構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dbjpanda/convex-tenants --skill convex-tenants

インストール後、Claude Code で/convex-tenantsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

api-reference.md
error-handling.md
flexible-roles.md
hooks-guide.md
invitation-system.md
known-limitations.md
organization-store.md
permission-map.md
quick-start.md
react-components.md
README.md
testing-guide.md

詳細

Convex テナント

@djpanda/convex-authz による柔軟な認可を備えた、Convex 向けのマルチテナント組織・チーム管理です。

クイックスタート

  1. convex/convex.config.ts でコンポーネントを登録します。
import { defineApp } from "convex/server";
import tenants from "@djpanda/convex-tenants/convex.config";
import authz from "@djpanda/convex-authz/convex.config";

const app = defineApp();
app.use(tenants);
app.use(authz);

export default app;
  1. convex/authz.ts で認可を定義します。パッケージの TENANTS_PERMISSIONS と TENANTS_ROLES を使用してください。node_modules/@djpanda/convex-tenants/docs/quick-start.md を参照してください。

  2. convex/tenants.ts でテナント API を作成します。

import { makeTenantsAPI } from "@djpanda/convex-tenants";
import { components } from "./_generated/api";
import { authz } from "./authz";

export const { listOrganizations, createOrganization, inviteMember, ... } =
  makeTenantsAPI(components.tenants, {
    authz,
    creatorRole: "owner",
    auth: async (ctx) => (await getAuthUserId(ctx)) ?? null,
    getUser: async (ctx, userId) => {
      const user = await ctx.db.get(userId);
      return user ? { name: user.name, email: user.email } : null;
    },
  });
  1. React で使用します — useQuery(api.tenants.listOrganizations) を使うか、TenantsProvider と事前構築済みコンポーネントを使用してください。node_modules/@djpanda/convex-tenants/docs/react-components.md を参照してください。

主な概念

  • authz は独立したコンポーネントです — authz は tenants の子としてではなく、tenants と並べて登録してください。アプリのほかの部分でも、テナント外で authz を使用できます。
  • ロールは単なる文字列です — authz.ts で定義してください。デフォルトのロールは owner、admin、member です。node_modules/@djpanda/convex-tenants/docs/flexible-roles.md を参照してください。
  • 構造上のオーナー — 各組織には ownerId があります。オーナーが退会する前に transferOwnership を使用してください。すべての権限チェックは authz を介して行われます。
  • 組織のステータス — suspended または archived にするとミューテーションがブロックされます。再有効化できるのは、status: "active" を指定した updateOrganization のみです。

エクスポート

エクスポート説明
TENANTS_PERMISSIONSdefinePermissions() 用のデフォルト権限
TENANTS_ROLESdefineRoles() 用のデフォルトロール(owner、admin、member)
DEFAULT_TENANTS_PERMISSION_MAP操作 → 権限のマッピング
TENANTS_REQUIRED_PERMISSIONS権限文字列のフラットなリスト

ドキュメント(パッケージから読み込み)

ベースパス:node_modules/@djpanda/convex-tenants/docs/。ユーザーのキーワードまたはタスクに合ったドキュメントを選択し、必要なものだけを読み込みます。

ドキュメントパスユーザーが次の内容について尋ねた場合に読み込みます
クイックスタートdocs/quick-start.mdセットアップ、インストール、初回統合、convex.config、authz.ts、tenants.ts、利用開始、初期設定
API リファレンスdocs/api-reference.md関数名(listOrganizations、createOrganization、addMember、inviteMember など)、makeTenantsAPI のオプション、イベントフック、ミューテーション/クエリの引数、ページネーション(任意の paginationOpts を指定した listMembers/listTeams/listTeamMembers/listInvitations)、API シグネチャ
権限マップdocs/permission-map.md権限、permissionMap、操作の実行権限、操作ごとの権限、権限の上書き、ガード、操作ごとのアクセス制御
柔軟なロールdocs/flexible-roles.mdロール、カスタムロール、owner/admin/member、creatorRole、defineRoles、構造上のオーナー、transferOwnership、ロールの追加/削除
招待システムdocs/invitation-system.md招待、inviteMember、acceptInvitation、validateInvitationCreate、validateInvitationAccept、識別子の種類、メール/電話番号/ユーザー名、ドメイン許可リスト、招待のレート制限
React コンポーネントdocs/react-components.mdTenantsProvider、OrganizationSwitcher、MembersSection、TeamsSection、InviteMemberDialog、useOrganization、useMembers、useTeams、useOrganizationInvitations、MembersTable、TeamsGrid、AcceptInvitation、JoinByDomainSection、ページネーション対応フック
組織ストアdocs/organization-store.mdアクティブな組織、組織の切り替え、useOrganizationStore、setActiveOrganizationId、localStorage、storageKey、configureOrganizationStore

インストール

npm install @djpanda/convex-tenants @djpanda/convex-authz

React UI を使用する場合:npm install clsx tailwind-merge(任意のピア依存関係)。

コメント