跳到主要内容

SaaS多租户套餐设置

微语系统支持通过 vipLevel 为 SaaS 租户设置不同套餐等级,并基于组织套餐等级控制菜单显示、权限可用范围以及部分后台能力的开放范围。

当前实现里,套餐控制不是单独维护一张“套餐表”,而是以组织、菜单、权限上的 vipLevel 字段为核心,形成一套轻量但直接有效的分级控制机制。

设计目标​

这套设计主要解决下面几个问题:

  • 不同租户购买不同版本后,只看到自己有权使用的功能。
  • 平台管理员可以用统一方式控制菜单和权限,而不需要为每个租户单独维护一套前端配置。
  • 套餐升级后,租户只需要提升组织会员等级,系统即可自动开放对应能力。

vipLevel 字段说明​

当前代码中与套餐相关的 vipLevel 主要出现在三个层面:

1. 组织 vipLevel​

组织的 vipLevel 表示当前租户的套餐等级:

  • 0:非会员
  • 1 及以上:对应会员等级

组织管理页面支持直接设置会员等级,同时也保留了会员状态开关:

  • 当 vipLevel 大于 0 时,组织会被视为会员。
  • 当 vipLevel 为 0 时,组织会被视为非会员。
  • 后端会自动将空值或小于 0 的值归一化为 0。

也就是说,真正决定套餐能力的是 vipLevel,而不是单独的布尔开关。

查看组织vipLevel

org_viplevel

编辑修改组织vipLevel

org_viplevel_edit

2. 菜单 vipLevel​

菜单的 vipLevel 表示“显示该菜单所需的最低组织会员等级”:

  • 0:所有组织都可见
  • 1:至少一级会员才显示
  • 2:至少二级会员才显示

客服工作台加载菜单时,会读取当前组织的 vipLevel,并与菜单的 vipLevel 进行比较。只有当组织会员等级大于等于菜单要求等级时,该菜单才会显示。

这也是 自定义左侧菜单 能够按套餐控制显示范围的基础。

查看菜单vipLevel

menu_viplevel

编辑修改菜单vipLevel

menu_viplevel_edit

3. 权限 vipLevel​

权限也支持配置 vipLevel,用来表示“使用该权限所需的最低组织会员等级”。

这层控制主要体现在:

  • 权限管理页会展示权限所需的会员等级。
  • 角色授权时,非平台超级管理员看到的权限列表会自动过滤掉超出当前组织套餐等级的权限。
  • 即使角色体系中存在某些高级权限,低套餐组织也不会正常获得这些超出等级的授权能力。

因此,vipLevel 不只是菜单显示控制,也会参与权限范围控制。

查看权限vipLevel

authority_viplevel

编辑修改菜单vipLevel

authority_viplevel_edit

套餐配置入口​

当前套餐相关配置主要通过以下入口完成:

  1. 在组织管理中设置组织的会员等级。
  2. 在菜单管理中设置菜单的会员等级。
  3. 在权限管理中设置权限的会员等级。

推荐的配置顺序是:

  1. 先定义组织套餐等级。
  2. 再为菜单配置对应的显示门槛。
  3. 最后为权限配置对应的授权门槛。

这样组织升级套餐后,菜单和权限都会自动按等级生效。

生效规则​

从实际实现来看,套餐能力的生效链路如下:

  1. 平台管理员在组织管理中设置某个组织的 vipLevel。
  2. 前端登录后会读取当前组织信息,并拿到 currentOrg.vipLevel。
  3. 菜单加载时,对比 组织 vipLevel 和 菜单 vipLevel,决定菜单是否显示。
  4. 角色授权与权限展示时,对比 组织 vipLevel 和 权限 vipLevel,决定权限是否可见、可分配。

可以把它理解为一条统一规则:

  • 组织 vipLevel 是“当前租户拥有的套餐等级”。
  • 菜单 vipLevel 和权限 vipLevel 是“访问该能力所需的最低等级”。
  • 当 组织 vipLevel 大于等于要求等级时,功能才开放。

一个简单示例​

假设当前系统定义了如下等级:

  • 0:基础版
  • 1:专业版
  • 2:企业版

如果某组织的 vipLevel 为 1,那么:

  • vipLevel 为 0 的菜单和权限,全部可见。
  • vipLevel 为 1 的菜单和权限,可以使用。
  • vipLevel 为 2 的菜单和权限,不会开放。

如果后续把该组织升级到 2,那么只需要调整组织的 vipLevel,高等级菜单和权限就会自动生效,无需逐个菜单重新配置。

与自定义菜单的关系​

如果你正在为客服工作台配置菜单套餐控制,可以结合 自定义左侧菜单 一起使用:

  • 组织 vipLevel 决定租户当前处于哪个套餐。
  • 菜单 vipLevel 决定菜单在什么套餐下才显示。
  • 菜单 enabled 决定该菜单是否整体启用。

最终客服工作台是否显示某个菜单,取决于这两个条件是否同时满足:

  1. 菜单已启用。
  2. 组织 vipLevel 大于等于菜单 vipLevel。

与角色权限的关系​

套餐控制不只是“隐藏菜单”,还应该配合权限一起使用。

推荐做法是:

  • 菜单 vipLevel 用来控制入口显示。
  • 权限 vipLevel 用来控制真正可执行的操作范围。

这样即使用户知道某些接口路径,也不会因为只隐藏菜单就绕过套餐限制。

注意事项​

  1. vipLevel 的最小有效值是 0,后端会自动把空值或负数归零。
  2. 组织层面的 vipLevel 是整套套餐控制的根字段,前后端字段需要保持同步。
  3. 菜单套餐控制只负责显示层,真正的能力限制建议同时配置权限套餐等级。
  4. 平台默认菜单也支持配置会员等级,适合做不同套餐的功能差异化投放。
  5. 如果只是想临时隐藏某个菜单,应使用菜单的启用开关;如果想长期按套餐开放,应配置 vipLevel。

这页文档对您有帮助吗?