普通账号登录后菜单里没有删除客户,用 curl 直接 DELETE /api/customers/8812 返回 200,再查详情已经是 404。服务端日志里这条请求鉴权只花了 1 毫秒,只校验了 token 有效性。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

@PreAuthorize("hasAuthority('customer:delete')")
@DeleteMapping("/api/customers/{id}")
public void remove(@PathVariable Long id) { ... }

权限判断写在前端路由守卫和按钮的 v-if 上,后端只验了登录态没验动作权限。前端代码对调用方完全可见,删掉一段 JS 就能发出同样的请求。这一点先确认清楚,后面就不用反复试。

「前端鉴权无效」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,每个写接口加动作权限注解 按 permission code 校验;权限码从角色缓存里取 与菜单同源;把只在前端做的判断删掉 避免两套规则互相矛盾。

改完照着核一遍,普通账号调删除接口返回 403,菜单里没有删除按钮,接口也不再接受该请求。

作者 9823189