Skip to content

Commit 5c99508

Browse files
KN4CK3RSysoev, Vladimir
authored and
Sysoev, Vladimir
committed
Extended permission checks. (go-gitea#20517)
1 parent b67275d commit 5c99508

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

modules/context/package.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"code.gitea.io/gitea/models/organization"
1212
packages_model "code.gitea.io/gitea/models/packages"
1313
"code.gitea.io/gitea/models/perm"
14+
"code.gitea.io/gitea/models/unit"
1415
user_model "code.gitea.io/gitea/models/user"
1516
"code.gitea.io/gitea/modules/structs"
1617
)
@@ -52,14 +53,30 @@ func packageAssignment(ctx *Context, errCb func(int, string, interface{})) {
5253
}
5354

5455
if ctx.Package.Owner.IsOrganization() {
56+
org := organization.OrgFromUser(ctx.Package.Owner)
57+
5558
// 1. Get user max authorize level for the org (may be none, if user is not member of the org)
5659
if ctx.Doer != nil {
5760
var err error
58-
ctx.Package.AccessMode, err = organization.OrgFromUser(ctx.Package.Owner).GetOrgUserMaxAuthorizeLevel(ctx.Doer.ID)
61+
ctx.Package.AccessMode, err = org.GetOrgUserMaxAuthorizeLevel(ctx.Doer.ID)
5962
if err != nil {
6063
errCb(http.StatusInternalServerError, "GetOrgUserMaxAuthorizeLevel", err)
6164
return
6265
}
66+
// If access mode is less than write check every team for more permissions
67+
if ctx.Package.AccessMode < perm.AccessModeWrite {
68+
teams, err := organization.GetUserOrgTeams(ctx, org.ID, ctx.Doer.ID)
69+
if err != nil {
70+
errCb(http.StatusInternalServerError, "GetUserOrgTeams", err)
71+
return
72+
}
73+
for _, t := range teams {
74+
perm := t.UnitAccessModeCtx(ctx, unit.TypePackages)
75+
if ctx.Package.AccessMode < perm {
76+
ctx.Package.AccessMode = perm
77+
}
78+
}
79+
}
6380
}
6481
// 2. If authorize level is none, check if org is visible to user
6582
if ctx.Package.AccessMode == perm.AccessModeNone && organization.HasOrgOrUserVisible(ctx, ctx.Package.Owner, ctx.Doer) {

0 commit comments

Comments
 (0)