Allow poster to choose reviewers (#21084)

Allow the poster of a PR to choose reviewers (add only). 

Solve #20746
This commit is contained in:
Jason Song 2022-09-10 01:27:47 +08:00 committed by GitHub
parent b5d21c0adf
commit 831e981357
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 7 deletions

View file

@ -1336,11 +1336,16 @@ func ViewIssue(ctx *context.Context) {
if issue.IsPull { if issue.IsPull {
canChooseReviewer := ctx.Repo.CanWrite(unit.TypePullRequests) canChooseReviewer := ctx.Repo.CanWrite(unit.TypePullRequests)
if !canChooseReviewer && ctx.Doer != nil && ctx.IsSigned { if ctx.Doer != nil && ctx.IsSigned {
canChooseReviewer, err = issues_model.IsOfficialReviewer(ctx, issue, ctx.Doer) if !canChooseReviewer {
if err != nil { canChooseReviewer = ctx.Doer.ID == issue.PosterID
ctx.ServerError("IsOfficialReviewer", err) }
return if !canChooseReviewer {
canChooseReviewer, err = issues_model.IsOfficialReviewer(ctx, issue, ctx.Doer)
if err != nil {
ctx.ServerError("IsOfficialReviewer", err)
return
}
} }
} }

View file

@ -131,7 +131,10 @@ func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User,
return nil return nil
} }
pemResult = permDoer.CanAccessAny(perm.AccessModeWrite, unit.TypePullRequests) pemResult = doer.ID == issue.PosterID
if !pemResult {
pemResult = permDoer.CanAccessAny(perm.AccessModeWrite, unit.TypePullRequests)
}
if !pemResult { if !pemResult {
pemResult, err = issues_model.IsOfficialReviewer(ctx, issue, doer) pemResult, err = issues_model.IsOfficialReviewer(ctx, issue, doer)
if err != nil { if err != nil {
@ -201,7 +204,7 @@ func IsValidTeamReviewRequest(ctx context.Context, reviewer *organization.Team,
} }
doerCanWrite := permission.CanAccessAny(perm.AccessModeWrite, unit.TypePullRequests) doerCanWrite := permission.CanAccessAny(perm.AccessModeWrite, unit.TypePullRequests)
if !doerCanWrite { if !doerCanWrite && doer.ID != issue.PosterID {
official, err := issues_model.IsOfficialReviewer(ctx, issue, doer) official, err := issues_model.IsOfficialReviewer(ctx, issue, doer)
if err != nil { if err != nil {
log.Error("Unable to Check if IsOfficialReviewer for %-v in %-v#%d", doer, issue.Repo, issue.Index) log.Error("Unable to Check if IsOfficialReviewer for %-v in %-v#%d", doer, issue.Repo, issue.Index)