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/vben5GET /api/app/account/Vue3Router/ruoyiGET /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表中MenuSource与routerType匹配的记录。
四、容易混淆的接口(不是「当前登录人菜单」)
以下属于平台给公司配置权限,不要当成「当前登录账号菜单」:
| 方法 / 路径 | 用途 |
|---|---|
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/login → auth-session/my-menus;请求始终带 Token + __tenant |
| 平台管理端(Vben5) | account/login → account/Vue3Router/vben5 |
| Token 混用 | 禁止:公司 Token 调平台路由,或平台 Token 调 my-menus(缺租户会失败) |
六、相关代码位置
| 角色 | 路径 |
|---|---|
| 公司级菜单 | food-labeling-us/.../AuthSessionAppService.cs → GetMyMenusAsync |
| 公司级登录 | FoodLabeling.Th.Application/.../ThWebAuthAppService.cs |
| 平台级路由 | Yi.Framework.Rbac.Application/.../AccountService.cs → GetVue3Router |
| 平台级登录 | 同 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 / 路径与本文一致