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. 01为 Convex 应用添加组织管理
  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. 定义 authz,在 convex/authz.ts 中使用包提供的 TENANTS_PERMISSIONS 和 TENANTS_ROLES。参见 node_modules/@djpanda/convex-tenants/docs/quick-start.md。

  2. 创建租户 API,在 convex/tenants.ts 中:

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/。根据用户提到的关键词或任务选择对应文档 — 仅加载所需内容:

文档路径在用户询问以下内容时加载……
quick-startdocs/quick-start.md设置、安装、首次集成、convex.config、authz.ts、tenants.ts、入门、初始设置
api-referencedocs/api-reference.md函数名称(listOrganizations、createOrganization、addMember、inviteMember 等)、makeTenantsAPI 选项、事件钩子、变更/查询参数、分页(listMembers/listTeams/listTeamMembers/listInvitations 支持可选 paginationOpts)、API 签名
permission-mapdocs/permission-map.md权限、permissionMap、谁能做什么、操作权限、覆盖权限、守卫、各操作的访问控制
flexible-rolesdocs/flexible-roles.md角色、自定义角色、owner/admin/member、creatorRole、defineRoles、结构性所有者、transferOwnership、添加/移除角色
invitation-systemdocs/invitation-system.md邀请、inviteMember、acceptInvitation、validateInvitationCreate、validateInvitationAccept、标识符类型、电子邮件/电话/用户名、域名白名单、邀请速率限制
react-componentsdocs/react-components.mdTenantsProvider、OrganizationSwitcher、MembersSection、TeamsSection、InviteMemberDialog、useOrganization、useMembers、useTeams、useOrganizationInvitations、MembersTable、TeamsGrid、AcceptInvitation、JoinByDomainSection、分页钩子
organization-storedocs/organization-store.md活跃组织、切换组织、useOrganizationStore、setActiveOrganizationId、localStorage、storageKey、配置组织存储

安装

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

React UI 需要:npm install clsx tailwind-merge(可选的对等依赖)。

评论

支持 Markdown