Concepts
多租户
Nebutra 如何实现租户隔离——跨栈每个层次的数据、认证和上下文。
什么是租户?
在 Nebutra 中,租户是一个组织——使用你的产品的公司、团队或工作空间。每个租户拥有独立的:
- 成员(具有角色的用户)
- 数据(通过租户 ID 隔离)
- 计费套餐(FREE / PRO / ENTERPRISE)
- API 密钥和设置
- 功能标志覆盖
一个用户可以属于多个租户,无需重新登录即可切换。
租户生命周期
1. 用户注册 → 创建个人账户
2. 用户创建组织 → 提供租户
3. 租户获得唯一 org_id(如 org_2a8bXXXXXXXXX)
4. 租户所有者可以邀请成员(邮件邀请)
5. 成员获得角色:OWNER / ADMIN / MEMBER / VIEWER
6. 附加计费套餐:默认为 FREE
7. 每个租户生成 API 密钥(非每个用户)租户上下文
Nebutra 使用 @nebutra/tenant 通过 Node.js AsyncLocalStorage 在整个调用栈中传播租户上下文。这意味着在请求上下文中运行的任何代码都可以访问当前租户,无需将其作为参数传递。
import { getCurrentTenant } from "@nebutra/tenant";
const tenant = getCurrentTenant();
// → {
// tenantId: "org_2a8bXXX",
// plan: "pro",
// features: ["ai_workflows"],
// rateLimits: { apiCalls: 100000 }
// }数据库隔离
默认情况下,Nebutra 使用带行级安全(RLS)的共享 Schema。
每个存储租户特定数据的表都有 tenant_id 列。Prisma 客户端通过 PostgreSQL RLS 自动限定到当前租户:
import { withRls } from "@nebutra/tenant";
import { prisma } from "@/lib/db";
const db = withRls(prisma, tenant.tenantId);
const projects = await db.project.findMany(); // 仅返回此租户的项目成员角色
每个租户成员拥有且仅拥有一个角色:
| 角色 | 描述 |
|---|---|
OWNER | 完全控制、计费、可删除组织 |
ADMIN | 管理成员、设置、API 密钥 |
MEMBER | 核心产品访问权限 |
VIEWER | 只读访问权限 |
详见权限获取完整的权限范围矩阵。
相关文档
How is this guide?
在 GitHub 上编辑此页面
最后更新于