公司管理
1.前言
- 公司管理的本质是数据隔离,实现方式有两种,物理隔离和逻辑隔离
- 物理隔离:使用独立数据库/表,适用于SaaS、客户之间严格隔离的情形
- 逻辑隔离:共用表 + company_id,适用于企业内部子公司、集团架构
- 本章节不考虑SaaS,只考虑企业内部子公司、集团架构,也就是所谓的逻辑隔离
2.核心设计原则
- 采用“统一多公司模型 + 渐进式权限管控” 架构
- 架构统一,避免后期大改,不区分“单公司”和“多公司”逻辑,只专注于"公司切换"这个核心操作
- 权限可演进,平滑过渡,通过开启/关闭“数据角色”菜单的开关,来决定账户可以切换到哪家公司,从而决定操作哪家公司数据
| 设计点 | 说明 |
|---|---|
| 1. 统一多公司模型 | 无论系统有几个公司,所有表都带 company_id,所有查询都带 company_id 条件 |
| 2. 前期无管控 | 初始阶段,用户可自由切换公司(下拉列表返回所有公司) |
| 3. 后期开启权限管控 | 当需要隔离时,启用“数据角色”体系,建立 账户 -> 数据角色 -> 公司 的绑定关系 |
| 4. 切换公司双重校验 | 前端下拉过滤 + 后端提交时权限校验 |
| 5. 权限可开关 | “数据角色”菜单可开启/关闭,实现从“开放”到“管控”的平滑过渡 |
3.共享模块
- 白名单:所有公司共享,不做company_id筛选
- 上传模块:所有公司共享,不做company_id筛选
- 菜单列表:所有公司共享,不做company_id筛选
- App版本,App菜单:所有公司共享,不做company_id筛选
- 人员-角色-权限:所有公司共享,不做company_id筛选
4.待优化
- 数据实时性问题:数据角色开关,角色关联数据发生变动时,前端无法感知(不能直接再前端推送更新),导致下拉列表不是最新,只能在后端校验,或者通过Token 有效期控制,让用户一天一登录

浙公网安备 33010602011771号