保存应用菜单角色授权
查看文档来源信息
- 来源目录:
addons/sys_base/docs - 来源文件:
接口文档/保存应用菜单角色授权.md
详细说明
按当前模块、当前应用范围已经正式发布的 app_menu 清单保存角色移动端/应用端菜单授权和应用端默认首页。保存结果写入独立表 sys_app_menu_authority_grants,不会写入 sys_authority_menus,不会修改角色 PCWEB 默认页;保存成功后会把当前角色已授权 app_menu 页面和动作中的 grantApis 一并编译进该角色运行态 Casbin。
该接口用于恢复中间件原有“角色配置应用菜单权限给移动端使用”的正式链路。应用菜单权限和系统菜单权限允许不同。
当 appScope 指向单个具体应用时,保存前会沿用应用菜单运行态的发布命中规则:先按应用 UUID 匹配,再按 AppID 匹配,再按应用模型 UUID 匹配,最后按当前模块全部应用匹配。若该应用实际命中了某个已发布范围,授权记录会写入实际发布范围的 appScopeKey,保证角色授权页和应用端运行态读取同一份授权结果。
接口信息
| 项目 | 内容 |
|---|---|
| 请求方式 | POST |
| 请求路径 | /sys_base/platform/manifest/saveAppMenuAuthority |
| 来源文件 | 接口文档/保存应用菜单角色授权.md |
请求头
| 请求头 | 示例值 | 说明 |
|---|---|---|
Content-Type | application/json | 请求体格式。 |
x-token | <token> | 登录令牌。 |
app-id | <app-id> | 当前应用 ID。 |
addons-type | take_away | 当前模块标识。 |
入参
json
{
"authorityId": 20,
"addonsType": "take_away",
"appScope": {
"scopeMode": "app_uuids",
"appUuids": ["APP_UUID_001"]
},
"pageCodes": ["take_away.app.home"],
"menuFlags": [],
"actionCodes": ["take_away.app.home.view"],
"defaultPageCode": "take_away.app.home"
}参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
authorityId | number | 是 | 目标角色 ID,必须属于当前模块 |
addonsType | string | 是 | 当前模块标识,必须与目标角色 addonsType 一致 |
appScope.scopeMode | string | 是 | 应用菜单范围,支持 all_apps、app_model_uuids、app_uuids、app_ids |
appScope.appModelUuids | string[] | 条件必填 | scopeMode=app_model_uuids 时必填 |
appScope.appUuids | string[] | 条件必填 | scopeMode=app_uuids 时必填 |
appScope.appIds | string[] | 条件必填 | scopeMode=app_ids 时必填 |
pageCodes | string[] | 否 | 本次授权的应用页面编码,必须存在于当前范围已发布 app_menu.pages |
menuFlags | string[] | 否 | 本次授权的应用菜单标识,必须存在于当前范围已发布 app_menu.menuSeeds 或动作授权标识 |
actionCodes | string[] | 否 | 本次授权的应用动作编码,必须存在于当前范围已发布 app_menu.actions |
defaultPageCode | string | 否 | 应用端默认首页页面编码;传入时必须属于本次保存后的应用页面授权 |
请求示例
当前文档未提供独立请求示例,请参考下方 curl 示例。
响应输出
json
{
"code": 0,
"data": {
"summary": {
"published": true,
"addonsType": "take_away",
"authorityId": 20,
"appScopeKey": "scopeMode=app_uuids|appModelUuids=|appUuids=APP_UUID_001|appIds=",
"appScope": {
"scopeMode": "app_uuids",
"appUuids": ["APP_UUID_001"]
},
"catalogVersion": "2026.06.10",
"sourceProjectCode": "take_away",
"versionUuid": "MENU_CATALOG_VERSION_xxx",
"pageCount": 1,
"actionCount": 1,
"menuFlagCount": 2,
"saveNote": "按当前模块、当前应用范围已发布 app_menu 清单保存移动端页面和动作授权;菜单授权结果独立于 PCWEB/system_menu,接口 grantApis 会同步进入角色运行态 Casbin。"
},
"selectedPageCodes": ["take_away.app.home"],
"selectedMenuFlags": ["take_away.app.home", "take_away.app.home.view"],
"selectedActionCodes": ["take_away.app.home.view"],
"defaultPage": {
"pageCode": "take_away.app.home",
"routeName": "takeAwayAppHome",
"menuFlag": "take_away.app.home"
},
"defaultPageChanged": true,
"defaultPageReason": "explicit_selected_page"
},
"msg": "success"
}字段说明
| 字段 | 说明 |
|---|---|
data.summary.published | 当前模块、当前应用范围是否已有成功发布的 app_menu |
data.summary.appScopeKey | 后端归一化后的应用范围键;单个具体应用命中其他已发布范围时,返回实际保存授权的发布范围键 |
data.summary.pageCount | 本次确认保存的页面数量 |
data.summary.actionCount | 本次确认保存的动作数量 |
data.summary.menuFlagCount | 本次确认保存的菜单标识数量 |
data.selectedPageCodes | 后端确认有效的页面编码 |
data.selectedMenuFlags | 后端确认有效的菜单标识 |
data.selectedActionCodes | 后端确认有效的动作编码 |
data.defaultPage | 保存后解析出的应用端默认首页;无有效默认页时为空 |
data.defaultPageChanged | 本次是否调整了当前角色、当前应用范围的应用端默认首页 |
data.defaultPageReason | 默认首页处理原因,例如 explicit_selected_page、retained_selected_page、cleared_ungranted_page |
curl 示例
bash
curl --location --request POST 'http://127.0.0.1:8100/sys_base/platform/manifest/saveAppMenuAuthority' \
--header 'Content-Type: application/json' \
--header 'x-token: <token>' \
--header 'app-id: <app-id>' \
--header 'addons-type: take_away' \
--data-raw '{
"authorityId": 20,
"addonsType": "take_away",
"appScope": {
"scopeMode": "app_uuids",
"appUuids": ["APP_UUID_001"]
},
"pageCodes": ["take_away.app.home"],
"actionCodes": ["take_away.app.home.view"],
"defaultPageCode": "take_away.app.home"
}'