新增一个区域运营角色,需要能看订单但不能退款。改完漏了两个接口,测试环境直接调退款接口返回 200。翻代码发现权限判断写在 37 个 Controller 里,写法有三种。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,每个接口自己写 if 判断当前用户有没有权限,有的查 session,有的查缓存,有的直接比角色名。规则没有统一入口,新增角色只能靠全局搜索逐个补。
「权限校验分散」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。改完顺手把文档补一句,省得下次自己重新推一遍。
grep -rn "hasRole\|getRole().equals\|checkPerm" src/main/java --include=*.java # 统计手写判断的落点 wc -l perms_scan.txt
具体做法是,权限判断收进注解或拦截器 接口上只声明需要的权限码;角色和权限码的对应关系放到配置里 加角色不用改代码;用脚本扫一遍现有 Controller 找出还在手写判断的地方。
最后用这个标准收尾,新增角色只需要在配置里加一段映射,Controller 里搜不到手写的权限判断,退款接口对该角色返回 403。
