Skip to content

Commit 69396b5

Browse files
committed
always check map length instead of nil
1 parent 8ba2d63 commit 69396b5

File tree

3 files changed

+13
-18
lines changed

3 files changed

+13
-18
lines changed

models/migrations/v1_11/v111.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x *xorm.Engine) error {
336336
if err != nil {
337337
return false, err
338338
}
339-
if perm.UnitsMode == nil {
339+
if len(perm.UnitsMode) == 0 {
340340
for _, u := range perm.Units {
341341
if u.Type == UnitTypeCode {
342342
return AccessModeWrite <= perm.AccessMode, nil

models/perm/access/repo_permission.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
type Permission struct {
2121
AccessMode perm_model.AccessMode
2222
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
2424
}
2525

2626
// IsOwner returns true if current user is the owner of repository.
@@ -33,17 +33,14 @@ func (p *Permission) IsAdmin() bool {
3333
return p.AccessMode >= perm_model.AccessModeAdmin
3434
}
3535

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
3737
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
4239
}
4340

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
4542
func (p *Permission) UnitAccessMode(unitType unit.Type) perm_model.AccessMode {
46-
if p.UnitsMode == nil {
43+
if len(p.UnitsMode) == 0 {
4744
for _, u := range p.Units {
4845
if u.Type == unitType {
4946
return p.AccessMode
@@ -145,6 +142,12 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
145142
}
146143
}()
147144

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+
148151
// anonymous user visit private repo.
149152
// TODO: anonymous user visit public unit of private repo???
150153
if user == nil && repo.IsPrivate {
@@ -171,12 +174,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
171174
return perm, nil
172175
}
173176

174-
if err := repo.LoadUnits(ctx); err != nil {
175-
return perm, err
176-
}
177-
178-
perm.Units = repo.Units
179-
180177
// anonymous visit public repo
181178
if user == nil {
182179
perm.AccessMode = perm_model.AccessModeRead
@@ -202,8 +199,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
202199
return perm, nil
203200
}
204201

205-
perm.UnitsMode = make(map[unit.Type]perm_model.AccessMode)
206-
207202
// Collaborators on organization
208203
if isCollaborator {
209204
for _, u := range repo.Units {

services/convert/repository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func ToRepo(ctx context.Context, repo *repo_model.Repository, permissionInRepo a
2525
func innerToRepo(ctx context.Context, repo *repo_model.Repository, permissionInRepo access_model.Permission, isParent bool) *api.Repository {
2626
var parent *api.Repository
2727

28-
if permissionInRepo.Units == nil && permissionInRepo.UnitsMode == nil {
28+
if len(permissionInRepo.Units) == 0 && len(permissionInRepo.UnitsMode) == 0 {
2929
// If Units and UnitsMode are both nil, it means that it's a hard coded permission,
3030
// like access_model.Permission{AccessMode: perm.AccessModeAdmin}.
3131
// So we need to load units for the repo, or UnitAccessMode will always return perm.AccessModeNone.

0 commit comments

Comments
 (0)