]> source.dussan.org Git - gitea.git/commitdiff
Users with `read` permission of pull requests can be assigned too (#27263)
authorLunny Xiao <xiaolunwen@gmail.com>
Sat, 24 Feb 2024 14:14:48 +0000 (22:14 +0800)
committerGitHub <noreply@github.com>
Sat, 24 Feb 2024 14:14:48 +0000 (14:14 +0000)
This PR will also keep the consistent between list assigned users and
check assigned users.

models/perm/access/repo_permission.go
models/repo/user_repo.go

index 395ecdf1a5031d784bec4ab9d4a0955dee0ef753..4175cb9b926613f14163f8e1c604f13a4d5f2402 100644 (file)
@@ -332,7 +332,6 @@ func HasAccessUnit(ctx context.Context, user *user_model.User, repo *repo_model.
 
 // CanBeAssigned return true if user can be assigned to issue or pull requests in repo
 // Currently any write access (code, issues or pr's) is assignable, to match assignee list in user interface.
-// FIXME: user could send PullRequest also could be assigned???
 func CanBeAssigned(ctx context.Context, user *user_model.User, repo *repo_model.Repository, _ bool) (bool, error) {
        if user.IsOrganization() {
                return false, fmt.Errorf("Organization can't be added as assignee [user_id: %d, repo_id: %d]", user.ID, repo.ID)
@@ -341,7 +340,8 @@ func CanBeAssigned(ctx context.Context, user *user_model.User, repo *repo_model.
        if err != nil {
                return false, err
        }
-       return perm.CanAccessAny(perm_model.AccessModeWrite, unit.TypeCode, unit.TypeIssues, unit.TypePullRequests), nil
+       return perm.CanAccessAny(perm_model.AccessModeWrite, unit.AllRepoUnitTypes...) ||
+               perm.CanAccessAny(perm_model.AccessModeRead, unit.TypePullRequests), nil
 }
 
 // HasAccess returns true if user has access to repo
index dd2ef6220116be7a868d23c1c201ca9f2ce975b3..30c9db7474d45f8cf408fa824da99d5a571fb601 100644 (file)
@@ -8,6 +8,7 @@ import (
 
        "code.gitea.io/gitea/models/db"
        "code.gitea.io/gitea/models/perm"
+       "code.gitea.io/gitea/models/unit"
        user_model "code.gitea.io/gitea/models/user"
        "code.gitea.io/gitea/modules/container"
        api "code.gitea.io/gitea/modules/structs"
@@ -78,7 +79,8 @@ func GetRepoAssignees(ctx context.Context, repo *Repository) (_ []*user_model.Us
        if err = e.Table("team_user").
                Join("INNER", "team_repo", "`team_repo`.team_id = `team_user`.team_id").
                Join("INNER", "team_unit", "`team_unit`.team_id = `team_user`.team_id").
-               Where("`team_repo`.repo_id = ? AND `team_unit`.access_mode >= ?", repo.ID, perm.AccessModeWrite).
+               Where("`team_repo`.repo_id = ? AND (`team_unit`.access_mode >= ? OR (`team_unit`.access_mode = ? AND `team_unit`.`type` = ?))",
+                       repo.ID, perm.AccessModeWrite, perm.AccessModeRead, unit.TypePullRequests).
                Distinct("`team_user`.uid").
                Select("`team_user`.uid").
                Find(&additionalUserIDs); err != nil {