自定义角色

角色体系

角色来源说明
owner系统内置组织创建者,不可更改、不可转让
member系统内置默认角色
自定义配置文件开发者定义的额外角色

配置文件

api/src/config/website/tenant.{suffix}.ts 中定义:

import type { TenantConfig } from "@readystart/api-core"

export const getTenantConfig = (): TenantConfig => ({
  roles: [
    { value: "admin", label: "管理员" },
    { value: "editor", label: "编辑" },
    { value: "viewer", label: "查看者" },
  ]
})

规则

前端表现

邀请时

成员管理

后端校验

三层保护:

  1. 配置加载:过滤非法 value、保留字
  2. validateRole:Controller 层校验角色是否在配置列表中
  3. Service 层role === 'owner' 兜底拦截
// Controller 中
private async validateRole(role: string) {
  const roles = await getTenantRoles()
  const allowed = roles.filter(r => r.value !== 'owner').map(r => r.value)
  if (!allowed.includes(role)) {
    throw new ForbiddenException(`Invalid role: ${role}`)
  }
}

在业务代码中使用

// 检查是否有某个角色
if (req.tenant?.role === 'admin' || req.tenant?.role === 'owner') {
  // 有管理权限
}

// 菜单中按角色过滤
{ index: "/reports", title: "Reports", icon: FileText, tenantRoles: ["owner", "admin"] }