@@ -11,7 +11,6 @@ import (
11
11
"code.gitea.io/gitea/models/perm"
12
12
"code.gitea.io/gitea/models/unit"
13
13
user_model "code.gitea.io/gitea/models/user"
14
- "code.gitea.io/gitea/modules/log"
15
14
"code.gitea.io/gitea/modules/setting"
16
15
"code.gitea.io/gitea/modules/structs"
17
16
)
@@ -31,29 +30,34 @@ type Organization struct {
31
30
}
32
31
33
32
func (org * Organization ) CanWriteUnit (ctx * Context , unitType unit.Type ) bool {
34
- if ctx .Doer == nil {
35
- return false
36
- }
37
- return org .UnitPermission (ctx , ctx .Doer .ID , unitType ) >= perm .AccessModeWrite
33
+ return org .Organization .UnitPermission (ctx , ctx .Doer , unitType ) >= perm .AccessModeWrite
38
34
}
39
35
40
- func (org * Organization ) UnitPermission (ctx * Context , doerID int64 , unitType unit.Type ) perm.AccessMode {
41
- if doerID > 0 {
42
- teams , err := organization .GetUserOrgTeams (ctx , org .Organization .ID , doerID )
43
- if err != nil {
44
- log .Error ("GetUserOrgTeams: %v" , err )
45
- return perm .AccessModeNone
46
- }
47
- if len (teams ) > 0 {
48
- return teams .UnitMaxAccess (unitType )
49
- }
50
- }
36
+ func (org * Organization ) CanReadUnit (ctx * Context , unitType unit.Type ) bool {
37
+ return org .Organization .UnitPermission (ctx , ctx .Doer , unitType ) >= perm .AccessModeRead
38
+ }
51
39
52
- if org .Organization .Visibility == structs .VisibleTypePublic {
53
- return perm .AccessModeRead
54
- }
40
+ func GetOrganizationByParams (ctx * Context ) {
41
+ orgName := ctx .Params (":org" )
42
+
43
+ var err error
55
44
56
- return perm .AccessModeNone
45
+ ctx .Org .Organization , err = organization .GetOrgByName (ctx , orgName )
46
+ if err != nil {
47
+ if organization .IsErrOrgNotExist (err ) {
48
+ redirectUserID , err := user_model .LookupUserRedirect (orgName )
49
+ if err == nil {
50
+ RedirectToUser (ctx , orgName , redirectUserID )
51
+ } else if user_model .IsErrUserRedirectNotExist (err ) {
52
+ ctx .NotFound ("GetUserByName" , err )
53
+ } else {
54
+ ctx .ServerError ("LookupUserRedirect" , err )
55
+ }
56
+ } else {
57
+ ctx .ServerError ("GetUserByName" , err )
58
+ }
59
+ return
60
+ }
57
61
}
58
62
59
63
// HandleOrgAssignment handles organization assignment
@@ -77,25 +81,26 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
77
81
requireTeamAdmin = args [3 ]
78
82
}
79
83
80
- orgName := ctx .Params (":org" )
81
-
82
84
var err error
83
- ctx .Org .Organization , err = organization .GetOrgByName (ctx , orgName )
84
- if err != nil {
85
- if organization .IsErrOrgNotExist (err ) {
86
- redirectUserID , err := user_model .LookupUserRedirect (orgName )
87
- if err == nil {
88
- RedirectToUser (ctx , orgName , redirectUserID )
89
- } else if user_model .IsErrUserRedirectNotExist (err ) {
90
- ctx .NotFound ("GetUserByName" , err )
91
- } else {
92
- ctx .ServerError ("LookupUserRedirect" , err )
85
+
86
+ if ctx .ContextUser == nil {
87
+ // if Organization is not defined, get it from params
88
+ if ctx .Org .Organization == nil {
89
+ GetOrganizationByParams (ctx )
90
+ if ctx .Written () {
91
+ return
93
92
}
94
- } else {
95
- ctx .ServerError ("GetUserByName" , err )
96
93
}
94
+ } else if ctx .ContextUser .IsOrganization () {
95
+ if ctx .Org == nil {
96
+ ctx .Org = & Organization {}
97
+ }
98
+ ctx .Org .Organization = (* organization .Organization )(ctx .ContextUser )
99
+ } else {
100
+ // ContextUser is an individual User
97
101
return
98
102
}
103
+
99
104
org := ctx .Org .Organization
100
105
101
106
// Handle Visibility
@@ -156,6 +161,7 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
156
161
}
157
162
ctx .Data ["IsOrganizationOwner" ] = ctx .Org .IsOwner
158
163
ctx .Data ["IsOrganizationMember" ] = ctx .Org .IsMember
164
+ ctx .Data ["IsProjectEnabled" ] = true
159
165
ctx .Data ["IsPackageEnabled" ] = setting .Packages .Enabled
160
166
ctx .Data ["IsRepoIndexerEnabled" ] = setting .Indexer .RepoIndexerEnabled
161
167
ctx .Data ["IsPublicMember" ] = func (uid int64 ) bool {
@@ -231,6 +237,10 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
231
237
return
232
238
}
233
239
}
240
+
241
+ ctx .Data ["CanReadProjects" ] = ctx .Org .CanReadUnit (ctx , unit .TypeProjects )
242
+ ctx .Data ["CanReadPackages" ] = ctx .Org .CanReadUnit (ctx , unit .TypePackages )
243
+ ctx .Data ["CanReadCode" ] = ctx .Org .CanReadUnit (ctx , unit .TypeCode )
234
244
}
235
245
236
246
// OrgAssignment returns a middleware to handle organization assignment
0 commit comments