convex-tenants
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseConvex Tenants
Convex Tenants
Multi-tenant organization and team management for Convex with flexible authorization via .
@djpanda/convex-authz借助提供的灵活授权机制,实现Convex的多租户组织与团队管理。
@djpanda/convex-authzQuick Start
快速开始
- Register components in :
convex/convex.config.ts
typescript
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;-
Define authz in— use
convex/authz.tsandTENANTS_PERMISSIONSfrom the package. SeeTENANTS_ROLES.node_modules/@djpanda/convex-tenants/docs/quick-start.md -
Create tenants API in:
convex/tenants.ts
typescript
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;
},
});- Use in React — , or use pre-built components with
useQuery(api.tenants.listOrganizations). SeeTenantsProvider.node_modules/@djpanda/convex-tenants/docs/react-components.md
- 在中注册组件:
convex/convex.config.ts
typescript
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;-
在中定义授权规则 — 使用包中的
convex/authz.ts和TENANTS_PERMISSIONS。详见TENANTS_ROLES。node_modules/@djpanda/convex-tenants/docs/quick-start.md -
在中创建租户API:
convex/tenants.ts
typescript
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;
},
});- 在React中使用 — ,或结合
useQuery(api.tenants.listOrganizations)使用预构建组件。详见TenantsProvider。node_modules/@djpanda/convex-tenants/docs/react-components.md
Key Concepts
核心概念
- authz is a sibling component — Register alongside
authz, not as a child. Other parts of your app can use authz outside tenants.tenants - Roles are plain strings — Define them in authz.ts. Default roles: ,
owner,admin. Seemember.node_modules/@djpanda/convex-tenants/docs/flexible-roles.md - Structural owner — Each org has an . Use
ownerIdbefore owner leaves. All permission checks go through authz.transferOwnership - Organization status — or
suspendedblocks mutations; onlyarchivedwithupdateOrganizationcan reactivate.status: "active"
- authz是同级组件 — 将与
authz一同注册,而非作为子组件。应用的其他部分可在租户场景外使用authz。tenants - 角色为普通字符串 — 在authz.ts中定义角色。默认角色:、
owner、admin。详见member。node_modules/@djpanda/convex-tenants/docs/flexible-roles.md - 结构化所有者 — 每个组织都有一个。所有者离开前需调用
ownerId转移所有权。所有权限检查均通过authz执行。transferOwnership - 组织状态 — (暂停)或
suspended(归档)状态会阻止变更操作;仅调用archived并设置updateOrganization可重新激活。status: "active"
Exports
导出内容
| Export | Description |
|---|---|
| Default permissions for |
| Default roles (owner, admin, member) for |
| Operation → permission mapping |
| Flat list of permission strings |
| 导出项 | 描述 |
|---|---|
| |
| |
| 操作→权限的映射关系 |
| 权限字符串的扁平列表 |
Documentation (read from package)
文档(从包中读取)
Base path: . Select the doc that matches the user's keywords or task — load only what's needed:
node_modules/@djpanda/convex-tenants/docs/| Doc | Path | Load when user asks about… |
|---|---|---|
| quick-start | | Setup, install, first-time integration, convex.config, authz.ts, tenants.ts, getting started, initial setup |
| api-reference | | Function names (listOrganizations, createOrganization, addMember, inviteMember, etc.), makeTenantsAPI options, event hooks, mutation/query args, pagination (listMembers/listTeams/listTeamMembers/listInvitations with optional paginationOpts), API signatures |
| permission-map | | Permissions, permissionMap, who can do what, operation permissions, overriding permissions, guards, access control per operation |
| flexible-roles | | Roles, custom roles, owner/admin/member, creatorRole, defineRoles, structural owner, transferOwnership, add/remove roles |
| invitation-system | | Invitations, inviteMember, acceptInvitation, validateInvitationCreate, validateInvitationAccept, identifier type, email/phone/username, domain whitelist, rate limiting invitations |
| react-components | | TenantsProvider, OrganizationSwitcher, MembersSection, TeamsSection, InviteMemberDialog, useOrganization, useMembers, useTeams, useOrganizationInvitations, MembersTable, TeamsGrid, AcceptInvitation, JoinByDomainSection, paginated hooks |
| organization-store | | Active organization, switching orgs, useOrganizationStore, setActiveOrganizationId, localStorage, storageKey, configureOrganizationStore |
基础路径:。根据用户的关键词或任务选择对应文档 — 仅加载所需内容:
node_modules/@djpanda/convex-tenants/docs/| 文档 | 路径 | 用户询问以下内容时加载 |
|---|---|---|
| quick-start | | 搭建、安装、首次集成、convex.config、authz.ts、tenants.ts、入门指南、初始设置 |
| api-reference | | 函数名称(listOrganizations、createOrganization、addMember、inviteMember等)、makeTenantsAPI选项、事件钩子、变更/查询参数、分页(listMembers/listTeams/listTeamMembers/listInvitations结合可选paginationOpts)、API签名 |
| permission-map | | 权限、permissionMap、操作权限分配、覆盖权限、守卫、按操作划分的访问控制 |
| flexible-roles | | 角色、自定义角色、owner/admin/member、creatorRole、defineRoles、结构化所有者、transferOwnership、添加/移除角色 |
| invitation-system | | 邀请、inviteMember、acceptInvitation、validateInvitationCreate、validateInvitationAccept、标识符类型、邮箱/电话/用户名、域名白名单、邀请频率限制 |
| react-components | | TenantsProvider、OrganizationSwitcher、MembersSection、TeamsSection、InviteMemberDialog、useOrganization、useMembers、useTeams、useOrganizationInvitations、MembersTable、TeamsGrid、AcceptInvitation、JoinByDomainSection、分页钩子 |
| organization-store | | 活跃组织、切换组织、useOrganizationStore、setActiveOrganizationId、localStorage、storageKey、配置organizationStore |
Installation
安装
bash
npm install @djpanda/convex-tenants @djpanda/convex-authzFor React UI: (optional peer deps).
npm install clsx tailwind-mergebash
npm install @djpanda/convex-tenants @djpanda/convex-authz如需React UI:(可选对等依赖)。
npm install clsx tailwind-merge