Skip to content

Commit bdf9e88

Browse files
committed
fix
1 parent 98637fe commit bdf9e88

File tree

9 files changed

+213
-213
lines changed

9 files changed

+213
-213
lines changed

models/perm/access/repo_permission.go

+32-15
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,14 @@ func (p *Permission) LogString() string {
175175
return fmt.Sprintf(format, args...)
176176
}
177177

178-
func applyEveryoneRepoPermission(user *user_model.User, perm *Permission) {
178+
func finalProcessRepoUnitPermission(user *user_model.User, perm *Permission) {
179179
if user == nil || user.ID <= 0 {
180+
// for anonymous access, it could be:
181+
// AccessMode is None or Read, units has repo units, unitModes is nil
180182
return
181183
}
184+
185+
// apply everyone access permissions
182186
for _, u := range perm.units {
183187
if u.EveryoneAccessMode >= perm_model.AccessModeRead && u.EveryoneAccessMode > perm.everyoneAccessMode[u.Type] {
184188
if perm.everyoneAccessMode == nil {
@@ -187,17 +191,40 @@ func applyEveryoneRepoPermission(user *user_model.User, perm *Permission) {
187191
perm.everyoneAccessMode[u.Type] = u.EveryoneAccessMode
188192
}
189193
}
194+
195+
if perm.unitsMode == nil {
196+
// if unitsMode is not set, then it means that the default p.AccessMode applies to all units
197+
return
198+
}
199+
200+
// remove no permission units
201+
origPermUnits := perm.units
202+
perm.units = make([]*repo_model.RepoUnit, 0, len(perm.units))
203+
for _, u := range origPermUnits {
204+
shouldKeep := false
205+
for t := range perm.unitsMode {
206+
if shouldKeep = u.Type == t; shouldKeep {
207+
break
208+
}
209+
}
210+
for t := range perm.everyoneAccessMode {
211+
if shouldKeep = shouldKeep || u.Type == t; shouldKeep {
212+
break
213+
}
214+
}
215+
if shouldKeep {
216+
perm.units = append(perm.units, u)
217+
}
218+
}
190219
}
191220

192221
// GetUserRepoPermission returns the user permissions to the repository
193222
func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, user *user_model.User) (perm Permission, err error) {
194223
defer func() {
195224
if err == nil {
196-
applyEveryoneRepoPermission(user, &perm)
197-
}
198-
if log.IsTrace() {
199-
log.Trace("Permission Loaded for user %-v in repo %-v, permissions: %-+v", user, repo, perm)
225+
finalProcessRepoUnitPermission(user, &perm)
200226
}
227+
log.Trace("Permission Loaded for user %-v in repo %-v, permissions: %-+v", user, repo, perm)
201228
}()
202229

203230
if err = repo.LoadUnits(ctx); err != nil {
@@ -294,16 +321,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
294321
}
295322
}
296323

297-
// remove no permission units
298-
perm.units = make([]*repo_model.RepoUnit, 0, len(repo.Units))
299-
for t := range perm.unitsMode {
300-
for _, u := range repo.Units {
301-
if u.Type == t {
302-
perm.units = append(perm.units, u)
303-
}
304-
}
305-
}
306-
307324
return perm, err
308325
}
309326

models/perm/access/repo_permission_test.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ func TestApplyEveryoneRepoPermission(t *testing.T) {
5050
{Type: unit.TypeWiki, EveryoneAccessMode: perm_model.AccessModeRead},
5151
},
5252
}
53-
applyEveryoneRepoPermission(nil, &perm)
53+
finalProcessRepoUnitPermission(nil, &perm)
54+
assert.Empty(t, perm.units)
5455
assert.False(t, perm.CanRead(unit.TypeWiki))
5556

5657
perm = Permission{
@@ -59,7 +60,8 @@ func TestApplyEveryoneRepoPermission(t *testing.T) {
5960
{Type: unit.TypeWiki, EveryoneAccessMode: perm_model.AccessModeRead},
6061
},
6162
}
62-
applyEveryoneRepoPermission(&user_model.User{ID: 0}, &perm)
63+
finalProcessRepoUnitPermission(&user_model.User{ID: 0}, &perm)
64+
assert.Empty(t, perm.units)
6365
assert.False(t, perm.CanRead(unit.TypeWiki))
6466

6567
perm = Permission{
@@ -68,29 +70,31 @@ func TestApplyEveryoneRepoPermission(t *testing.T) {
6870
{Type: unit.TypeWiki, EveryoneAccessMode: perm_model.AccessModeRead},
6971
},
7072
}
71-
applyEveryoneRepoPermission(&user_model.User{ID: 1}, &perm)
73+
finalProcessRepoUnitPermission(&user_model.User{ID: 1}, &perm)
7274
assert.True(t, perm.CanRead(unit.TypeWiki))
7375

7476
perm = Permission{
75-
AccessMode: perm_model.AccessModeWrite,
77+
AccessMode: perm_model.AccessModeAdmin,
7678
units: []*repo_model.RepoUnit{
7779
{Type: unit.TypeWiki, EveryoneAccessMode: perm_model.AccessModeRead},
7880
},
7981
}
80-
applyEveryoneRepoPermission(&user_model.User{ID: 1}, &perm)
82+
finalProcessRepoUnitPermission(&user_model.User{ID: 1}, &perm)
8183
// it should work the same as "EveryoneAccessMode: none" because the default AccessMode should be applied to units
82-
assert.True(t, perm.CanWrite(unit.TypeWiki))
84+
assert.True(t, perm.CanWrite(unit.TypeWiki)) // no unitsMode, so it uses AccessMode
8385

8486
perm = Permission{
8587
units: []*repo_model.RepoUnit{
88+
{Type: unit.TypeCode}, // will be removed
8689
{Type: unit.TypeWiki, EveryoneAccessMode: perm_model.AccessModeRead},
8790
},
8891
unitsMode: map[unit.Type]perm_model.AccessMode{
8992
unit.TypeWiki: perm_model.AccessModeWrite,
9093
},
9194
}
92-
applyEveryoneRepoPermission(&user_model.User{ID: 1}, &perm)
95+
finalProcessRepoUnitPermission(&user_model.User{ID: 1}, &perm)
9396
assert.True(t, perm.CanWrite(unit.TypeWiki))
97+
assert.Len(t, perm.units, 1)
9498
}
9599

96100
func TestUnitAccessMode(t *testing.T) {

options/locale/locale_en-US.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -2160,7 +2160,7 @@ settings.advanced_settings = Advanced Settings
21602160
settings.wiki_desc = Enable Repository Wiki
21612161
settings.use_internal_wiki = Use Built-In Wiki
21622162
settings.default_wiki_branch_name = Default Wiki Branch Name
2163-
settings.default_wiki_everyone_access = Default Access Permission for signed-in users:
2163+
settings.default_permission_everyone_access = Default access permission for all signed-in users:
21642164
settings.failed_to_change_default_wiki_branch = Failed to change the default wiki branch.
21652165
settings.use_external_wiki = Use External Wiki
21662166
settings.external_wiki_url = External Wiki URL

routers/web/repo/issue_poster.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,9 @@ type userSearchResponse struct {
2626
Results []*userSearchInfo `json:"results"`
2727
}
2828

29-
// IssuePosters get posters for current repo's issues/pull requests
30-
func IssuePosters(ctx *context.Context) {
31-
issuePosters(ctx, false)
32-
}
33-
34-
func PullPosters(ctx *context.Context) {
35-
issuePosters(ctx, true)
29+
func IssuePullPosters(ctx *context.Context) {
30+
isPullList := ctx.PathParam("type") == "pulls"
31+
issuePosters(ctx, isPullList)
3632
}
3733

3834
func issuePosters(ctx *context.Context, isPullList bool) {

routers/web/repo/setting/setting.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,9 @@ func SettingsPost(ctx *context.Context) {
447447

448448
if form.EnableCode && !unit_model.TypeCode.UnitGlobalDisabled() {
449449
units = append(units, repo_model.RepoUnit{
450-
RepoID: repo.ID,
451-
Type: unit_model.TypeCode,
450+
RepoID: repo.ID,
451+
Type: unit_model.TypeCode,
452+
EveryoneAccessMode: perm.ParseAccessMode(form.DefaultCodeEveryoneAccess, perm.AccessModeNone, perm.AccessModeRead),
452453
})
453454
} else if !unit_model.TypeCode.UnitGlobalDisabled() {
454455
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeCode)
@@ -524,6 +525,7 @@ func SettingsPost(ctx *context.Context) {
524525
AllowOnlyContributorsToTrackTime: form.AllowOnlyContributorsToTrackTime,
525526
EnableDependencies: form.EnableIssueDependencies,
526527
},
528+
EveryoneAccessMode: perm.ParseAccessMode(form.DefaultIssuesEveryoneAccess, perm.AccessModeNone, perm.AccessModeRead),
527529
})
528530
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalTracker)
529531
} else {

0 commit comments

Comments
 (0)