Files
junhong_cmp_fiber/openspec/changes/archive/2026-01-30-login-response-menus-buttons/proposal.md
2026-01-30 17:22:38 +08:00

52 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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 接口性能(未修改)