@@ -11,7 +11,6 @@ import (
1111 "code.gitea.io/gitea/models/perm"
1212 "code.gitea.io/gitea/models/unit"
1313 user_model "code.gitea.io/gitea/models/user"
14- "code.gitea.io/gitea/modules/log"
1514 "code.gitea.io/gitea/modules/setting"
1615 "code.gitea.io/gitea/modules/structs"
1716)
@@ -31,29 +30,34 @@ type Organization struct {
3130}
3231
3332func (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
3834}
3935
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+ }
5139
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
5544
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+ }
5761}
5862
5963// HandleOrgAssignment handles organization assignment
@@ -77,25 +81,26 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
7781 requireTeamAdmin = args [3 ]
7882 }
7983
80- orgName := ctx .Params (":org" )
81-
8284 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
9392 }
94- } else {
95- ctx .ServerError ("GetUserByName" , err )
9693 }
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
97101 return
98102 }
103+
99104 org := ctx .Org .Organization
100105
101106 // Handle Visibility
@@ -156,6 +161,7 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
156161 }
157162 ctx .Data ["IsOrganizationOwner" ] = ctx .Org .IsOwner
158163 ctx .Data ["IsOrganizationMember" ] = ctx .Org .IsMember
164+ ctx .Data ["IsProjectEnabled" ] = true
159165 ctx .Data ["IsPackageEnabled" ] = setting .Packages .Enabled
160166 ctx .Data ["IsRepoIndexerEnabled" ] = setting .Indexer .RepoIndexerEnabled
161167 ctx .Data ["IsPublicMember" ] = func (uid int64 ) bool {
@@ -231,6 +237,10 @@ func HandleOrgAssignment(ctx *Context, args ...bool) {
231237 return
232238 }
233239 }
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 )
234244}
235245
236246// OrgAssignment returns a middleware to handle organization assignment
0 commit comments