2.6 KiB
2.6 KiB
Why
当前登录接口只返回扁平的权限码列表 permissions: [],前端需要额外处理才能渲染侧边栏菜单(需要树形结构)和控制按钮显示(需要按钮权限列表)。这导致前端需要额外请求菜单接口或在本地维护菜单配置,增加了复杂度和请求次数。通过在登录时直接返回分类好的菜单树和按钮权限,前端可以一次性获取所有必要数据并存储到 localStorage,无需二次请求,简化前端实现并提升用户体验。
What Changes
- 在
LoginResponseDTO 中新增两个字段:menus: []MenuNode- 菜单树(树形结构)buttons: []string- 按钮权限码列表(扁平)
- 新增
MenuNodeDTO 结构体,包含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 接口性能(未修改)