从表格到管理系统:别先写页面,先补齐权限、流程和审计
"把这几张 Excel 做成网页"听起来像一个明确需求,实际往往只描述了界面,没有描述系统。
表格真正承载的可能是客户、订单、审批和对账;微信群承载的则是催办、授权与异常处理。开发团队如果直接从字段和页面开工,很容易得到一个在线版表格:能增删改查,却仍然说不清谁能改、状态怎么走、失败如何恢复。
我的判断边界是:Excel 并没有过时。Microsoft 365 已支持共同编辑和版本历史。只有当协作复杂度、权限风险、流程稳定度、错误成本或数据复用价值开始上升时,管理系统才可能比改进表格更划算。

工程场景与决策冲突
判断是否立项,可以看 7 类信号:
- 多人维护导致人工合并和版本判断;
- 不同角色应看到或修改不同数据;
- 业务存在稳定的多步状态流转;
- 错录、漏审或重复操作的代价已经较高;
- 同一数据在表格、群聊和其他工具中反复复制;
- 必须回答谁在什么时候改了什么;
- 数据要继续用于报表、API、小程序或 APP。

这不是一个"命中三项就开发"的统计阈值。更实用的办法是分别评估发生频率和影响程度。低频、低影响问题先改善模板和责任分工;高频但流程尚未稳定的问题先做流程梳理或低代码试验;高频、高影响且规则稳定,才适合进入定制系统评估。
方案拆解与关键权衡
1. 页面不是第一层,业务不变量才是
先写出"永远不允许发生什么":关闭的工单不能再次指派,跨租户角色不能分配,停用用户不能继续持有有效会话。它们应该在服务端统一执行,关键关联再由数据库约束兜底。
2. 角色与权限要分开
角色是能力集合,权限是更细粒度的动作。页面、菜单、API 只是这些能力的不同入口。如果把授权写成页面里的用户名判断,角色一变化,规则就会散落到各处。
3. 应用校验与数据库约束要配合
本次核验的 ruyi_admin_gold 身份管理实现中,应用服务按租户约束用户和角色读写,角色分配只接受同租户角色;数据库迁移又为用户角色关系增加租户列和两组复合外键,并约束租户内角色代码唯一。
应用层给出业务语义,数据库层守住不可破坏的结构边界。只做其中一层,都容易在批处理、维护脚本或后续功能中留下绕过路径。
4. 审计不是异步"顺手记一下"
成功变更与关键审计记录需要保持一致。核验实现把身份管理变更与审计写入放在同一数据库事务中;用户停用和密码重置还会撤销有效会话。否则,业务已经回滚而日志显示成功,或密码已重置但旧会话仍能调用接口,都会形成新的风险。
实现链路与最小示例
第一版最好选择一个纵向切片,而不是铺开十几个模块。例如只实现"采购申请从创建到审批完成":

- 输入:创建申请,校验必填项和唯一标识;
- 规则:金额、组织和申请人满足领域约束;
- 状态:只允许草稿 → 待审批 → 已通过/已拒绝;
- 授权:申请人、审批人、管理员拥有不同动作;
- 事务:状态变更、关联数据和审计保持一致;
- 输出:通知下一责任人,并形成可查询结果。
数据模型至少要表达实体、状态、归属范围、版本或并发控制字段,以及必要的唯一约束。授权判断应位于应用服务或统一策略层;前端隐藏按钮只负责体验,不能作为安全边界。
迁移也要进入设计:先固定字段口径,抽取小批样本,清洗并导入测试环境,再回读核对数量、唯一键、状态和关键金额。上线前写清失败回退点、旧表停止写入时间和归档负责人。
证据、限制与自动化边界
本文引用的项目事实来自固定提交和文件哈希,而不是根据界面截图推断:
- 应用服务:租户范围读写、同租户角色分配、停用/重置后撤销会话、业务变更与审计同事务;
- 数据库迁移:租户复合外键、租户内角色代码唯一、明确的角色状态约束;
- 验收记录:身份增删改查、防自锁、旧会话撤销和重复运行后的状态复原;
- 知识依据:角色与权限分离,便于组合能力和后续扩展。
这些证据证明的是一种可复用的边界设计,不代表所有管理系统都必须采用相同技术栈。单组织、低风险工具可以更轻;涉及多租户、资金或敏感数据时,还需要更完整的威胁建模、备份恢复和合规评估。
同样,不要把测试通过等同于生产可用。上线验收还应覆盖真实身份源、并发、备份恢复、监控告警和回滚演练。
可复用检查清单
- 先写业务问题和失败代价,再列功能;
- 明确核心实体、唯一标识和合法状态转换;
- 用动作设计权限,用角色聚合权限;
- 把组织、租户和数据范围写进查询与约束;
- 前端、API、应用服务和数据库边界不相互替代;
- 高风险变更与审计保持事务一致;
- 停用、改密等动作同步处理旧会话;
- 第一版只打通一个端到端纵向流程;
- 导入后从新系统回读并逐项核对;
- 验收包含越权、非法状态、重复执行和失败恢复。
收束
从表格到管理系统,最难的不是把单元格变成输入框,而是把隐含规则变成可执行、可拒绝、可追溯、可验收的系统边界。
你做过的项目里,最容易被低估的是权限、迁移、审计,还是失败恢复?欢迎补充你的取舍和踩坑。
发布前门禁
- 工程选择、边界与证据链完整
- 未给出未经验证的数据结论
- 未自行补写实验结果
- 图片使用本地源文件并记录生成来源