核心解答
很多ERP、CRM、SaaS和内部管理系统上线以后才发现,权限问题远比“管理员和普通员工两个角色”复杂。
页面上看不到某个按钮,不等于用户真的没有权限。
真正的权限系统至少要回答三个问题:这个人能不能进入这个功能、能不能执行这个动作、能够操作哪些数据。
RBAC解决的是角色和能力之间的关系
RBAC通常把用户关联到角色,再由角色关联权限。
例如销售、销售主管、财务、仓库管理员和系统管理员拥有不同能力。
这种模型比给每个员工单独勾几十个权限更容易维护,因为人员变化时通常只需要调整角色关系。
但是RBAC本身并不能自动解决“销售A只能看到自己的客户,主管可以看到整个部门客户”这种数据范围问题。
菜单权限不是安全边界
前端隐藏菜单、按钮或路由,主要解决用户体验问题。
真正的授权必须在后端接口再次校验。
如果一个员工虽然看不到“删除客户”按钮,却能够手工调用删除接口,那么这个系统实际上没有完成删除权限控制。
接口层应该根据当前登录身份判断是否拥有当前操作权限,而不是信任前端传来的role或user_id。
数据权限要单独设计
企业系统最常见的越权并不是普通员工突然变成管理员,而是A员工能够读取B员工的数据。
常见的数据范围可能包括本人、所在部门、部门及下级、指定组织、某个门店、某个租户或全部数据。
这些规则应该成为明确的服务端查询条件,而不是每个开发人员在不同页面里临时写一个if。
一旦列表接口做了过滤,详情、导出、搜索、批量处理和附件接口也必须保持同样的边界。
对象级权限不能只检查ID是否存在
假设接口是 /orders/123。
后端查询到订单123存在,并不能说明当前用户就有资格查看它。
系统还需要验证这条订单属于哪个租户、门店、部门或客户,以及当前身份是否具备对应数据范围。
这类对象级授权缺失,是企业后台非常典型的横向越权来源。
高权限账号要遵循最小权限原则
开发、运维和超级管理员账号不能因为方便就长期拥有所有生产权限。
数据库、对象存储、云平台和业务后台都应尽量把日常工作权限与紧急管理权限分开。
真正需要越权处理时,可以临时提升权限,并留下明确的操作记录。
这样既降低误操作风险,也能在出现问题后知道是谁做了什么。
审计日志不是普通运行日志
Nginx访问日志和程序异常日志不能替代业务审计。
对于改价、退款、审批、删除、导出、修改权限、切换租户、重置账号等关键操作,最好记录操作者、时间、目标对象、动作、重要变更前后值以及请求来源。
审计记录本身还应避免被普通业务账号随意修改或删除。
权限变化需要考虑会话失效
员工离职、角色被取消或管理员降低权限以后,旧Token和旧Session是否还能继续使用,是常被忽略的问题。
重要权限变更后,应考虑让相关会话失效,或者让每次关键操作都重新读取最新权限状态。
否则数据库里已经取消权限,旧登录态仍可能继续使用数小时甚至数天。
怎么测试权限系统
至少准备两个普通用户、两个部门和一个管理员。
让A用户主动尝试读取B用户的详情、导出B部门数据、修改不属于自己的记录、直接调用隐藏按钮对应接口,以及修改请求中的user_id或tenant_id。
安全测试的目标不是证明正常页面能打开,而是主动证明越权请求会被稳定拒绝。
资料依据
NIST关于Role Based Access Control的模型对用户、角色和权限关系进行了系统定义。
OWASP Authorization Cheat Sheet长期强调默认拒绝、最小权限、每次请求进行授权以及防止IDOR和对象级越权。
结论
一个成熟的企业权限系统应把身份、功能权限、数据范围、对象级授权、租户边界和审计日志分开设计。RBAC是基础,但真正决定系统是否安全的是:任何接口在任何路径下,都不能让用户越过自己应有的数据和操作边界。
继续了解这个主题
ERP定制的核心是统一采购、销售、库存、仓储、财务和售后数据,先梳理流程再决定功能。
阅读全文 →企业管理系统多租户SaaS最怕什么?不是功能少,而是不同客户的数据串了SaaS最严重的问题之一是租户隔离失效。tenant_id、权限校验、数据库策略、缓存、文件和后台工具任何一层遗漏,都可能造成跨客户数据访问。
阅读全文 →企业管理系统SaaS平台开发一般多少钱?多租户、权限和计费成本分析SaaS平台开发比单企业系统多了租户隔离、套餐、权限、计费、运营后台和升级兼容等工作。
阅读全文 →企业管理系统进销存系统开发要哪些功能?采购销售库存完整流程进销存系统应把采购、销售、库存、仓库、客户供应商和报表连接起来,关键是数据一致性。
阅读全文 →淄博卓亚网络科技服务有限公司
电话:15269365953
地址:山东省淄博市张店区体育场街道办事处华光路2号泽泉消防市场三楼S18