2026-07-23泰额版当前登录账号菜单接口.md 6.9 KB

2026-07-23 泰额版:当前登录账号菜单接口

本文档说明 泰额版「获取当前登录账号菜单」的两套接口:平台级公司级(租户)

与「平台给公司配置 SaaS 菜单权限」(menu-permission-tree / company-menus)不同:
本文接口返回的是当前登录人自己可见的菜单,用于侧边栏 / 动态路由 / 按钮权限。


一、对照一览

维度 平台级 公司级(租户业务端)
适用角色 平台管理员(Yi 框架 / 主库账号) 某公司(租户)下的业务管理员 / 员工
登录接口 POST /api/app/account/login POST /api/app/th-web-auth/login(须带 tenantId
拉菜单接口 GET /api/app/account/Vue3Router/vben5 GET /api/app/auth-session/my-menus
备选 GET /api/app/account(用户+角色+菜单)
数据来源 当前 Account 上下文下的 menu(按 MenuSource 过滤) 当前租户业务库 menu + 角色菜单
租户上下文 一般 __tenant / JWT TenantId JWT 含 TenantId,建议 Header 再带 __tenant
实现 AccountService.GetVue3Router AuthSessionAppService.GetMyMenusAsync

Base URL 示例http://127.0.0.1:19002(以 appsettings / 部署环境为准)。


二、公司级:当前登录账号菜单

2.1 接口

方法 / 路径 GET /api/app/auth-session/my-menus
鉴权 Authorization: Bearer {token}
租户 Token 须来自 th-web-auth/login;建议同时传 Header __tenant: {tenantId}
说明 返回当前用户角色、权限码、可见菜单树;未识别租户时会报错引导使用泰额登录

2.2 登录(前置)

POST /api/app/th-web-auth/login
Content-Type: application/json

{
  "tenantId": "11111111-1111-1111-1111-111111111111",
  "userName": "admin",
  "password": "123456"
}

不要用 POST /api/app/account/login 作为泰额公司端主登录(无租户会查主库)。

2.3 curl 示例

# 1) 登录拿 Token
curl -X POST "http://127.0.0.1:19002/api/app/th-web-auth/login" \
  -H "Content-Type: application/json" \
  -d "{\"tenantId\":\"<tenantId>\",\"userName\":\"admin\",\"password\":\"123456\"}"

# 2) 拉当前账号菜单
curl -G "http://127.0.0.1:19002/api/app/auth-session/my-menus" \
  -H "Authorization: Bearer <token>" \
  -H "__tenant: <tenantId>"

2.4 出参要点(CurrentUserMenuPermissionsOutputDto

字段 说明
user 当前用户简要信息
roleCodes 角色编码列表
permissionCodes 权限码列表(超管常见 *:*:*
accessPermissionCodes 角色访问权限编码(如 manage_people
menus 菜单树(children 嵌套;根 parentId 多为 "0"
role 角色展示名
fullName 全名
lastUpdated 系统编辑 / 业务变更相关时间(供前端刷新缓存)

未带租户上下文时,典型错误提示:

未识别租户上下文。请使用泰额登录接口(th-web-auth / th-app-auth)或请求头 __tenant 携带租户 Id。


三、平台级:当前登录账号菜单

3.1 接口(推荐)

方法 / 路径 GET /api/app/account/Vue3Router/vben5
鉴权 Authorization: Bearer {token}
说明 将当前登录用户菜单转为 Vben5 前端路由结构

routerType 路径参数:

对应 MenuSourceEnum 说明
vben5(推荐) 2 = Vben5 Vben Admin v5 路由构建
ruoyi 0 = Ruoyi 若依 Vue3 路由构建
pure 1 = Pure vue-pure-admin 路由构建
省略 默认按 ruoyi 与框架历史默认一致

完整路径示例:

  • GET /api/app/account/Vue3Router/vben5
  • GET /api/app/account/Vue3Router/ruoyi
  • GET /api/app/account/Vue3Router/pure

3.2 备选:账户信息(含菜单)

方法 / 路径 GET /api/app/account
鉴权 需登录
说明 返回 UserRoleMenuDto(用户、角色、菜单等),非专门「路由树」格式

3.3 登录(前置)

POST /api/app/account/login
Content-Type: application/json

{
  "userName": "admin",
  "password": "123456"
}

平台主库账号;一般不传 tenantId。字段名以 Swagger 为准(历史上 Web 登录可能按邮箱匹配)。

3.4 curl 示例

# 1) 平台登录
curl -X POST "http://127.0.0.1:19002/api/app/account/login" \
  -H "Content-Type: application/json" \
  -d "{\"userName\":\"admin\",\"password\":\"123456\"}"

# 2) 拉当前账号 Vben5 路由菜单
curl -G "http://127.0.0.1:19002/api/app/account/Vue3Router/vben5" \
  -H "Authorization: Bearer <platform-token>"

3.5 行为说明

  • 按当前用户角色关联菜单过滤;用户名为 admin 时框架侧可返回对应 MenuSource 下全部菜单再构建路由。
  • 只消费 menu 表中 MenuSourcerouterType 匹配的记录。

四、容易混淆的接口(不是「当前登录人菜单」)

以下属于平台给公司配置权限,不要当成「当前登录账号菜单」:

方法 / 路径 用途
GET /api/app/th-multi-tenancy/menu-permission-tree SaaS 菜单权限目录树(配置用)
GET /api/app/th-multi-tenancy/company-menus 查询某公司已开通的 menuPermissionKeys
PUT /api/app/th-multi-tenancy/company-menus 设置某公司 SaaS 菜单权限
GET /api/app/th-rbac-menu/tree 租户业务库菜单 CRUD/管理 全量树(非会话权限接口)

详见:项目相关文档/2026-07-21代码优化.md项目相关文档/2026-07-22代码优化.md


五、前端对接建议

登录后拉菜单
公司 / 租户 Web th-web-auth/loginauth-session/my-menus;请求始终带 Token + __tenant
平台管理端(Vben5) account/loginaccount/Vue3Router/vben5
Token 混用 禁止:公司 Token 调平台路由,或平台 Token 调 my-menus(缺租户会失败)

六、相关代码位置

角色 路径
公司级菜单 food-labeling-us/.../AuthSessionAppService.csGetMyMenusAsync
公司级登录 FoodLabeling.Th.Application/.../ThWebAuthAppService.cs
平台级路由 Yi.Framework.Rbac.Application/.../AccountService.csGetVue3Router
平台级登录 AccountService 登录接口

七、自检清单

  • [ ] 公司端:用 th-web-auth/login 拿到 Token 后再调 auth-session/my-menus
  • [ ] 公司端:Header 含 __tenant 或 JWT 内 TenantId 有效
  • [ ] 平台端:用 account/login 后再调 account/Vue3Router/vben5
  • [ ] 未把 company-menus / menu-permission-tree 误当作当前登录人菜单
  • [ ] Swagger 中确认实际 Host / 路径与本文一致