登录权限返回修改

This commit is contained in:
2026-01-30 17:22:38 +08:00
parent 4856a88d41
commit ffeb0417c0
12 changed files with 1884 additions and 7 deletions

View File

@@ -0,0 +1,51 @@
## Why
当前登录接口只返回扁平的权限码列表 `permissions: []`,前端需要额外处理才能渲染侧边栏菜单(需要树形结构)和控制按钮显示(需要按钮权限列表)。这导致前端需要额外请求菜单接口或在本地维护菜单配置,增加了复杂度和请求次数。通过在登录时直接返回分类好的菜单树和按钮权限,前端可以一次性获取所有必要数据并存储到 localStorage无需二次请求简化前端实现并提升用户体验。
## What Changes
-`LoginResponse` DTO 中新增两个字段:
- `menus: []MenuNode` - 菜单树(树形结构)
- `buttons: []string` - 按钮权限码列表(扁平)
- 新增 `MenuNode` DTO 结构体,包含 `id`, `perm_code`, `name`, `url`, `sort`, `children` 字段
- 修改 `auth.Service.Login()` 方法,新增权限分类逻辑:
- 基于 `perm_type` 字段分类1=菜单权限2=按钮权限)
- 根据 `device` 参数过滤平台(`platform=web/h5/all`
- 构建菜单树(基于 `parent_id` 字段的递归结构)
- 超级管理员返回所有菜单和按钮
- 保留原有 `permissions` 字段(向后兼容,包含所有权限码)
- `GetMe` 接口保持不变(不返回菜单,避免频繁查询)
## Capabilities
### New Capabilities
- `login-menu-button-response`: 登录接口返回菜单树和按钮权限,支持前端直接使用无需二次处理
### Modified Capabilities
(无现有能力被修改,这是新增功能)
## Impact
**修改的文件**
- `internal/model/dto/auth_dto.go` - 新增 MenuNode 结构体,修改 LoginResponse 结构体
- `internal/service/auth/service.go` - 修改 Login() 方法,新增权限分类和菜单树构建逻辑
**API 变更**(向后兼容):
- `POST /api/admin/login` - 响应体增加 `menus``buttons` 字段
- `POST /api/h5/login` - 响应体增加 `menus``buttons` 字段
- `GET /api/admin/me` - 保持不变(不返回菜单)
- `GET /api/h5/me` - 保持不变(不返回菜单)
**数据库影响**
- 无需修改数据库 schema复用现有 `tb_permission` 表的 `perm_type`, `parent_id`, `platform` 字段)
**前端影响**
- 可选升级:前端可以选择使用新的 `menus``buttons` 字段,也可以继续使用 `permissions` 字段(向后兼容)
- 推荐使用方式:登录后将 `menus``buttons` 存储到 localStorage页面刷新时从本地读取
**性能影响**
- 登录响应体增大(预计增加 5-10KB取决于权限数量
- 菜单树构建计算量增加O(n) 复杂度n 为权限数量,通常 < 100
- 不影响 GetMe 接口性能(未修改)