Is your feature request related to a problem? Please describe.
一个 Open API Token(Consumer)在 Apollo Portal 中支持授权多个 App / Namespace,这在多个项目共用一个集成 token 的场景下很常见。但目前 Portal 管理页 /open/manage.html(仅超级管理员)存在两个痛点:
- 看不见 token 授权了哪些 App / Namespace。 列表页只显示归属 AppId、名称、允许创建应用、限流 QPS、部门、Owner,没有任何入口能查看这个 token 到底被授予了对哪些 App / Namespace 的管理权限。
当前 Consumer 列表页:只有 "Grant Permission" 和 "Delete" 两个操作,看不到已授权范围。
- 无法撤销单条 App / Namespace 授权。 "Grant Permission" 弹窗是只增不删的;要移除某条授权,目前唯一的办法是删除整个 Consumer,这会连同 token 一起销毁,所有下游调用方都必须重新对接。
在实际运维中,一个 token 随着时间会累积很多 App 的授权,目前没有安全的方式去精细收敛权限。
Describe the solution you'd like
保留现有的 "Grant Permission" 添加流程不变,在其之上增加查看 + 撤销能力:
UI 改造
- 列表页每一行新增 "View Permissions" 按钮。
- 点击后弹出面板,列出该 token 当前持有的所有授权(App 级与 Namespace 级,Namespace 级带上
namespaceName 和 env)。
- 每一行末尾提供 "Revoke" 按钮,带二次确认。
- 修改场景通过"撤销 + 重新使用现有 Grant Permission 添加"完成,不引入独立的 edit 语义
Portal Management API 新增
GET /openapi/v1/consumers/{token}/authorized-apps
返回该 Consumer 当前所有 App / Namespace 授权列表。底层的 ConsumerService#findAppIdsAuthorizedByConsumerId(long) 已存在,目前只服务于 token 持有方自查的 /openapi/v1/apps/authorized,尚未开放给管理端。
DELETE /openapi/v1/consumers/{token}/roles
参数:type=AppRole|NamespaceRole、appId、可选 namespaceName、可选 env。撤销一条授权;Namespace 级撤销会同时移除对应的 ModifyNamespace 和 ReleaseNamespace 绑定。
两个新接口和 UI 入口继续沿用现有 Consumer 管理面的权限边界,通过 @unifiedPermissionValidator.isSuperAdmin() / isRootUser 限制超级管理员,并写入 ConsumerAudit。
按仓库 AGENTS.md 的契约先行要求,会先在 apolloconfig/apollo-openapi 提 spec PR,主仓再 bump apollo.openapi.spec.url 并在 PortalManagementController 实现生成的接口。
Describe alternatives you've considered
- 删除并重建整个 Consumer(当前唯一 workaround):会丢失 token、影响所有下游、无法只收敛某一个 App。
Additional context
底层数据模型已经支持一个 token 授权多个 App:授权关系记录在 ConsumerRole (consumerId, roleId) 表中,roleId 指向该 App 的 Master+{appId} 或该 Namespace 的 ModifyNamespace+... / ReleaseNamespace+... role。缺的只是管理端的查询、撤销接口,以及 UI 展示。
Is your feature request related to a problem? Please describe.
一个 Open API Token(Consumer)在 Apollo Portal 中支持授权多个 App / Namespace,这在多个项目共用一个集成 token 的场景下很常见。但目前 Portal 管理页
/open/manage.html(仅超级管理员)存在两个痛点:当前 Consumer 列表页:只有 "Grant Permission" 和 "Delete" 两个操作,看不到已授权范围。
在实际运维中,一个 token 随着时间会累积很多 App 的授权,目前没有安全的方式去精细收敛权限。
Describe the solution you'd like
保留现有的 "Grant Permission" 添加流程不变,在其之上增加查看 + 撤销能力:
UI 改造
namespaceName和env)。Portal Management API 新增
GET /openapi/v1/consumers/{token}/authorized-apps返回该 Consumer 当前所有 App / Namespace 授权列表。底层的
ConsumerService#findAppIdsAuthorizedByConsumerId(long)已存在,目前只服务于 token 持有方自查的/openapi/v1/apps/authorized,尚未开放给管理端。DELETE /openapi/v1/consumers/{token}/roles参数:
type=AppRole|NamespaceRole、appId、可选namespaceName、可选env。撤销一条授权;Namespace 级撤销会同时移除对应的ModifyNamespace和ReleaseNamespace绑定。两个新接口和 UI 入口继续沿用现有 Consumer 管理面的权限边界,通过
@unifiedPermissionValidator.isSuperAdmin()/isRootUser限制超级管理员,并写入ConsumerAudit。按仓库
AGENTS.md的契约先行要求,会先在apolloconfig/apollo-openapi提 spec PR,主仓再 bumpapollo.openapi.spec.url并在PortalManagementController实现生成的接口。Describe alternatives you've considered
Additional context
底层数据模型已经支持一个 token 授权多个 App:授权关系记录在
ConsumerRole (consumerId, roleId)表中,roleId指向该 App 的Master+{appId}或该 Namespace 的ModifyNamespace+.../ReleaseNamespace+...role。缺的只是管理端的查询、撤销接口,以及 UI 展示。