一套系统要同时服务几十家机构(诊所、培训机构),每家有自己的组织架构、员工和数据,且购买的套餐不同、能用的功能也不同。
如果按一套代码部署一份来做,运维成本和交付周期都不可接受;如果只做逻辑隔离,又要防止越权访问到别家机构的数据——这是这类 SaaS 最核心的两条底线。
我在项目里负责的就是这两条底线的落地方案。
点击空白处退出提示
一套系统要同时服务几十家机构(诊所、培训机构),每家有自己的组织架构、员工和数据,且购买的套餐不同、能用的功能也不同。
如果按一套代码部署一份来做,运维成本和交付周期都不可接受;如果只做逻辑隔离,又要防止越权访问到别家机构的数据——这是这类 SaaS 最核心的两条底线。
我在项目里负责的就是这两条底线的落地方案。
1)租户管理:开通、试用、续费、停用,租户级配置与品牌信息;
2)组织与账号:部门树、员工账号、角色分配、子账号;
3)权限模型:角色-权限点-菜单三级,支持数据权限(本人/本部门/全租户);
4)套餐与计费:功能包、席位数量、用量计费,试用期与到期策略;
5)数据隔离:所有业务表带 tenant_id,DAO 层统一注入,防止漏加条件;
6)审计日志:关键操作留痕,支持按租户、操作人、时间检索。
我负责租户隔离方案与权限模型的落地。
① 隔离方案取舍:最终选共享库 + tenant_id 逻辑隔离,配合 DAO 层统一注入与强制校验,兼顾成本与安全;对超大客户预留独立库的扩展点。
② 越权防护:权限校验放在服务层而非 Controller,避免新增接口漏配;数据权限通过 MyBatis 拦截器统一拼条件,杜绝某个查询忘了带 tenant_id。
③ 套餐能力开关:把功能点抽象成能力位,套餐映射能力集合,代码里按能力位判断而不是按套餐 ID 判断,新增套餐不用改业务代码。



评论