@@ -20,7 +20,7 @@ import (
20
20
type Permission struct {
21
21
AccessMode perm_model.AccessMode
22
22
Units []* repo_model.RepoUnit
23
- UnitsMode map [unit.Type ]perm_model.AccessMode
23
+ UnitsMode map [unit.Type ]perm_model.AccessMode // zero length means use the AccessMode above
24
24
}
25
25
26
26
// IsOwner returns true if current user is the owner of repository.
@@ -33,17 +33,14 @@ func (p *Permission) IsAdmin() bool {
33
33
return p .AccessMode >= perm_model .AccessModeAdmin
34
34
}
35
35
36
- // HasAccess returns true if the current user has at least read access to any unit of this repository
36
+ // HasAccess returns true if the current user might have at least read access to any unit of this repository
37
37
func (p * Permission ) HasAccess () bool {
38
- if p .UnitsMode == nil {
39
- return p .AccessMode >= perm_model .AccessModeRead
40
- }
41
- return len (p .UnitsMode ) > 0
38
+ return len (p .UnitsMode ) > 0 || p .AccessMode >= perm_model .AccessModeRead
42
39
}
43
40
44
- // UnitAccessMode returns current user accessmode to the specify unit of the repository
41
+ // UnitAccessMode returns current user access mode to the specify unit of the repository
45
42
func (p * Permission ) UnitAccessMode (unitType unit.Type ) perm_model.AccessMode {
46
- if p .UnitsMode == nil {
43
+ if len ( p .UnitsMode ) == 0 {
47
44
for _ , u := range p .Units {
48
45
if u .Type == unitType {
49
46
return p .AccessMode
@@ -145,6 +142,12 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
145
142
}
146
143
}()
147
144
145
+ if err := repo .LoadUnits (ctx ); err != nil {
146
+ return perm , err
147
+ }
148
+ perm .Units = repo .Units
149
+ perm .UnitsMode = make (map [unit.Type ]perm_model.AccessMode )
150
+
148
151
// anonymous user visit private repo.
149
152
// TODO: anonymous user visit public unit of private repo???
150
153
if user == nil && repo .IsPrivate {
@@ -171,12 +174,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
171
174
return perm , nil
172
175
}
173
176
174
- if err := repo .LoadUnits (ctx ); err != nil {
175
- return perm , err
176
- }
177
-
178
- perm .Units = repo .Units
179
-
180
177
// anonymous visit public repo
181
178
if user == nil {
182
179
perm .AccessMode = perm_model .AccessModeRead
@@ -202,8 +199,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
202
199
return perm , nil
203
200
}
204
201
205
- perm .UnitsMode = make (map [unit.Type ]perm_model.AccessMode )
206
-
207
202
// Collaborators on organization
208
203
if isCollaborator {
209
204
for _ , u := range repo .Units {
0 commit comments