Skip to content

fix: SUPER_ADMIN 无法审核自己提出的提升请求 #509

@zztdandan

Description

@zztdandan

问题描述

我发现 SUPER_ADMIN 提出的提升请求(promotion request),SUPER_ADMIN 自己无法审核批准。理论上 SUPER_ADMIN 应该拥有系统的所有权限能力,包括有资格审核自己提交的提升请求。

复现步骤

  1. 以 SUPER_ADMIN 身份登录
  2. 提交一个技能提升请求(从团队命名空间提升到 global)
  3. 进入提升审核界面
  4. 点击批准 → 返回 403 Forbidden

根因分析

ReviewPermissionChecker.canReviewPromotion() 中,当请求的提交者和审核者是同一人时,无条件返回 false,连 SUPER_ADMIN 也不放过:

// ReviewPermissionChecker.java:110-111
public boolean canReviewPromotion(PromotionRequest request, String userId, Set<String> platformRoles) {
    if (request.getSubmittedBy().equals(userId)) {
        return false;  // ← SUPER_ADMIN 也被拒绝
    }
    return hasPlatformReviewRole(platformRoles);
}

而普通审核的对应方法 canReview() 对 SUPER_ADMIN 有豁免:

// ReviewPermissionChecker.java:30-32
public boolean canReview(ReviewTask task, ...) {
    if (task.getSubmittedBy().equals(userId)) {
        return platformRoles.contains("SUPER_ADMIN")  // ← SUPER_ADMIN 可以自审核
                || canSelfReviewNamespace(...);
    }
    ...
}

既然 SUPER_ADMIN 拥有系统所有权限,提升审核的自我审核限制对 SUPER_ADMIN 不应生效。

修复方案

将第 111 行的 return false; 改为 return platformRoles.contains("SUPER_ADMIN");,与 canReview() 保持一致。

Metadata

Metadata

Assignees

No one assigned

    Labels

    effort/l大改动或高风险改动,需要 maintainer 负责 / Large or risky change requiring maintainer ownership.priority/p3低优先级 / Low priority triage bucket.triage/needs-info需要补充更多信息后才能分流 / Issue needs more detail before it can be routed.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions