先说结论
多租户后台的难点不是权限,是上下文:同一个人可能是平台超管,也可能正在替某个租户干活。
两种上下文
| 角色 | tenant_id | 看到什么 |
|---|---|---|
| 平台超管 | 0 | 平台概览、租户管理、地区管理 |
| 租户管理员 | >0 | 本租户的站点、产品、内容、留言 |
- 超管点「进入管理」→ session 写入
admin_tenant_id→ 进入该租户工作区 - 顶栏始终显示「当前管理:某租户」+「返回平台」
- 租户管理员在自己域名登录 → 直接进入本租户,没有切换下拉框
为什么不做"顶部下拉切换"
租户一多,下拉框会变成几十项,而且很容易误操作——在 A 租户的后台里,以为自己还在 B。
"进入 / 返回"是两步显式操作,比一个隐式下拉框安全得多。
防篡改
租户账号登录后:
- session 记录
admin_home_tenant_id - 任何请求里的
admin_tenant_id一律忽略(只认 session) - 超管切换租户只改 session,不动数据
角色
| 角色 | 能做什么 |
|---|---|
| super | 租户增删、切换任意租户 |
| owner | 本租户全部业务 + 店铺设置 + 本租户用户 |
| editor | 站点/产品/内容/媒体/留言,不能改设置、不能管用户 |
| viewer | 只读,所有写操作 403 |
角色够用就先别做逐菜单授权——那会让每次加菜单都要改权限矩阵。