SELECT menu_code FROM sys_menu WHERE parent_id = 40;
SELECT DISTINCT perm_code FROM sys_permission WHERE perm_code LIKE 'finance:%';
-- 两组结果应当一致

用户角色里没有财务模块的菜单,侧边栏不显示。手输 /api/finance/summary 返回 200 和完整金额。数据库里菜单配置的权限码是 finance:menu,接口注解上写的是 finance:view。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,菜单和接口各维护一套权限码,命名没有约定,配置时对不上也发现不了。前端按菜单码隐藏入口,后端按接口码放行,两边互不校验。

「菜单与接口权限不一致」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:菜单 接口 按钮统一用同一套权限码 建一张码表;启动时扫描注解和菜单配置 把对不上的打出来;加一条用例 遍历菜单不可见的模块逐个请求接口 期望 403。

改完只确认一件事:菜单码和接口码对齐后,无权限账号请求财务接口返回 403,菜单里也不显示该模块。

作者 9823189