Concepts

权限与 RBAC

Nebutra 的基于角色的访问控制模型——4 个角色、17 个类型化权限范围及如何强制执行。

概述

Nebutra 开箱即用地提供生产就绪的 RBAC(基于角色的访问控制)系统,包括:

  • 4 个内置角色OWNERADMINMEMBERVIEWER
  • 跨资源的 17 个类型化权限范围
  • 通过 CASL 在进程内强制执行(亚毫秒级)
  • 通过 OpenFGA 进行 Zanzibar 级强制执行(可选)
  • 通过 <Can> 组件进行 React UI 门控

角色

角色描述
OWNER完全控制——计费、删除、所有权限范围
ADMIN管理团队、设置、API 密钥——除组织删除外的所有权限
MEMBER核心产品访问——创建、读取、更新
VIEWER只读访问

权限范围参考

权限范围描述OWNERADMINMEMBERVIEWER
org:read读取组织详情
org:update更新组织设置
org:delete删除组织
member:read列出组织成员
member:invite邀请新成员
member:remove移除成员
member:update_role更改成员角色
api_key:create创建 API 密钥
api_key:read列出 API 密钥(脱敏)
api_key:delete撤销 API 密钥
project:create创建新项目
project:read读取项目数据
project:update更新项目设置
project:delete删除项目
billing:read查看计费信息
billing:update更改套餐/付款方式
audit_log:read查看审计日志

强制执行权限

API 网关(Hono 中间件)

import { requirePermission } from "@nebutra/permissions";

app.delete("/api/projects/:id", requirePermission("project:delete"), handler);

Server Actions(Next.js)

"use server";
import { requirePermission } from "@nebutra/permissions";

export async function deleteProject(projectId: string) {
  await requirePermission("project:delete"); // 未授权时抛出异常
}

React UI 门控

import { Can } from "@nebutra/permissions/react";

<Can action="delete" resource="Project">
  <DeleteButton />
</Can>

<Can action="billing:update" fallback={<UpgradePrompt />}>
  <BillingSettings />
</Can>

相关文档

How is this guide?

目录