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

2.6 KiB
Raw Blame History

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 - 响应体增加 menusbuttons 字段
  • POST /api/h5/login - 响应体增加 menusbuttons 字段
  • GET /api/admin/me - 保持不变(不返回菜单)
  • GET /api/h5/me - 保持不变(不返回菜单)

数据库影响

  • 无需修改数据库 schema复用现有 tb_permission 表的 perm_type, parent_id, platform 字段)

前端影响

  • 可选升级:前端可以选择使用新的 menusbuttons 字段,也可以继续使用 permissions 字段(向后兼容)
  • 推荐使用方式:登录后将 menusbuttons 存储到 localStorage页面刷新时从本地读取

性能影响

  • 登录响应体增大(预计增加 5-10KB取决于权限数量
  • 菜单树构建计算量增加O(n) 复杂度n 为权限数量,通常 < 100
  • 不影响 GetMe 接口性能(未修改)