Files
crawler-plugin/admin-frontend-vue
huangzd1997 7a6c3c3fa3 fix(菜单权限): 授权树按操作者置灰不可授予项 + 放行保留既有授权
普通管理员勾到无权授予的菜单后,ensureGrantable 抛 403,而 createUser/updateUser
都是 @Transactional,整笔回滚——线上表现就是「后台不能保存权限,也不能创建用户」
(2026-09-16 周丽娥账号创建用户与保存 uid=45 权限双双失败,库里查无新用户)。
根因是校验 2026-07-28 就加了,但授权树一直拿全量菜单,两边规则不一致。

- permission-menus 按操作者标记 grantable;授权树据此置灰(不隐藏:授权是整树替换,
  隐藏会把超管授予过、操作者自己没有的菜单当取消勾选删掉,与 09-13「权限自己没掉」同类)
- ensureGrantable 放行目标已持有的授权,只拦新增,不构成提权
- GlobalExceptionHandler 补业务异常日志:此前普通业务异常一行都不记,本次排查只能靠
  反推响应体字节数(nginx body_bytes_sent 含 chunked 开销)才定位到根因
2026-09-16 18:46:21 +08:00
..

Admin Frontend Vue

独立的后台管理前端工程,与客户端 frontend-vue 完全分离。

本地开发

npm install
$env:VITE_API_TARGET = "http://127.0.0.1:18080"
npm run dev

开发入口:http://localhost:5174/admin-vue/

构建

npm run build
npm test

构建产物在 dist/,部署到 Nginx 的 /admin-vue/ 根目录。该工程不写入客户端的 new_web_source,也不打进 Java JAR。

运行时契约

  • 登录态:复用同源 Cookie/Session。
  • 当前用户:GET /api/admin/current-user
  • 菜单树:GET /api/admin/current-user/menusJava 返回树形菜单。
  • 退出登录:POST /api/admin/logout
  • 前端路由:History 模式,基准路径 /admin-vue/
  • 权限粒度:菜单/页面级,不定义按钮级权限。

首批页面

  • /admin-vue/account/users
  • /admin-vue/account/menus
  • /admin-vue/account/groups

当前首批页面已接入 Java 现有用户、菜单和数据权限分组 API;Java 菜单接口完成树形响应和 Flyway 菜单迁移后,路由权限守卫即可按最终菜单树工作。