@@ -11,6 +11,7 @@ import (
11
11
"code.gitea.io/gitea/models/organization"
12
12
packages_model "code.gitea.io/gitea/models/packages"
13
13
"code.gitea.io/gitea/models/perm"
14
+ "code.gitea.io/gitea/models/unit"
14
15
user_model "code.gitea.io/gitea/models/user"
15
16
"code.gitea.io/gitea/modules/structs"
16
17
)
@@ -52,14 +53,30 @@ func packageAssignment(ctx *Context, errCb func(int, string, interface{})) {
52
53
}
53
54
54
55
if ctx .Package .Owner .IsOrganization () {
56
+ org := organization .OrgFromUser (ctx .Package .Owner )
57
+
55
58
// 1. Get user max authorize level for the org (may be none, if user is not member of the org)
56
59
if ctx .Doer != nil {
57
60
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 )
59
62
if err != nil {
60
63
errCb (http .StatusInternalServerError , "GetOrgUserMaxAuthorizeLevel" , err )
61
64
return
62
65
}
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
+ }
63
80
}
64
81
// 2. If authorize level is none, check if org is visible to user
65
82
if ctx .Package .AccessMode == perm .AccessModeNone && organization .HasOrgOrUserVisible (ctx , ctx .Package .Owner , ctx .Doer ) {
0 commit comments