Skip to content

Commit 4ab3ba3

Browse files
committed
fix
1 parent 98637fe commit 4ab3ba3

File tree

6 files changed

+87
-45
lines changed

6 files changed

+87
-45
lines changed

models/perm/access/repo_permission.go

+21-13
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ func (p *Permission) LogString() string {
177177

178178
func applyEveryoneRepoPermission(user *user_model.User, perm *Permission) {
179179
if user == nil || user.ID <= 0 {
180+
perm.units = nil
180181
return
181182
}
182183
for _, u := range perm.units {
@@ -187,6 +188,25 @@ func applyEveryoneRepoPermission(user *user_model.User, perm *Permission) {
187188
perm.everyoneAccessMode[u.Type] = u.EveryoneAccessMode
188189
}
189190
}
191+
// remove no permission units
192+
origPermUnits := perm.units
193+
perm.units = make([]*repo_model.RepoUnit, 0, len(perm.units))
194+
for _, u := range origPermUnits {
195+
shouldKeep := false
196+
for t := range perm.unitsMode {
197+
if shouldKeep = u.Type == t; shouldKeep {
198+
break
199+
}
200+
}
201+
for t := range perm.everyoneAccessMode {
202+
if shouldKeep = shouldKeep || u.Type == t; shouldKeep {
203+
break
204+
}
205+
}
206+
if shouldKeep {
207+
perm.units = append(perm.units, u)
208+
}
209+
}
190210
}
191211

192212
// GetUserRepoPermission returns the user permissions to the repository
@@ -195,9 +215,7 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
195215
if err == nil {
196216
applyEveryoneRepoPermission(user, &perm)
197217
}
198-
if log.IsTrace() {
199-
log.Trace("Permission Loaded for user %-v in repo %-v, permissions: %-+v", user, repo, perm)
200-
}
218+
log.Trace("Permission Loaded for user %-v in repo %-v, permissions: %-+v", user, repo, perm)
201219
}()
202220

203221
if err = repo.LoadUnits(ctx); err != nil {
@@ -294,16 +312,6 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
294312
}
295313
}
296314

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-
307315
return perm, err
308316
}
309317

models/perm/access/repo_permission_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func TestApplyEveryoneRepoPermission(t *testing.T) {
5151
},
5252
}
5353
applyEveryoneRepoPermission(nil, &perm)
54+
assert.Empty(t, perm.units)
5455
assert.False(t, perm.CanRead(unit.TypeWiki))
5556

5657
perm = Permission{
@@ -60,15 +61,18 @@ func TestApplyEveryoneRepoPermission(t *testing.T) {
6061
},
6162
}
6263
applyEveryoneRepoPermission(&user_model.User{ID: 0}, &perm)
64+
assert.Empty(t, perm.units)
6365
assert.False(t, perm.CanRead(unit.TypeWiki))
6466

6567
perm = Permission{
6668
AccessMode: perm_model.AccessModeNone,
6769
units: []*repo_model.RepoUnit{
6870
{Type: unit.TypeWiki, EveryoneAccessMode: perm_model.AccessModeRead},
71+
{Type: unit.TypeCode}, // will be removed
6972
},
7073
}
7174
applyEveryoneRepoPermission(&user_model.User{ID: 1}, &perm)
75+
assert.Len(t, perm.units, 1)
7276
assert.True(t, perm.CanRead(unit.TypeWiki))
7377

7478
perm = Permission{

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/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 {

services/forms/repo_form.go

+38-28
Original file line numberDiff line numberDiff line change
@@ -110,41 +110,51 @@ type RepoSettingForm struct {
110110
EnablePrune bool
111111

112112
// Advanced settings
113-
EnableCode bool
114-
EnableWiki bool
115-
EnableExternalWiki bool
116-
DefaultWikiBranch string
117-
DefaultWikiEveryoneAccess string
118-
ExternalWikiURL string
113+
EnableCode bool
114+
DefaultCodeEveryoneAccess string
115+
116+
EnableWiki bool
117+
EnableExternalWiki bool
118+
DefaultWikiBranch string
119+
DefaultWikiEveryoneAccess string
120+
ExternalWikiURL string
121+
119122
EnableIssues bool
123+
DefaultIssuesEveryoneAccess string
120124
EnableExternalTracker bool
121125
ExternalTrackerURL string
122126
TrackerURLFormat string
123127
TrackerIssueStyle string
124128
ExternalTrackerRegexpPattern string
125129
EnableCloseIssuesViaCommitInAnyBranch bool
126-
EnableProjects bool
127-
ProjectsMode string
128-
EnableReleases bool
129-
EnablePackages bool
130-
EnablePulls bool
131-
EnableActions bool
132-
PullsIgnoreWhitespace bool
133-
PullsAllowMerge bool
134-
PullsAllowRebase bool
135-
PullsAllowRebaseMerge bool
136-
PullsAllowSquash bool
137-
PullsAllowFastForwardOnly bool
138-
PullsAllowManualMerge bool
139-
PullsDefaultMergeStyle string
140-
EnableAutodetectManualMerge bool
141-
PullsAllowRebaseUpdate bool
142-
DefaultDeleteBranchAfterMerge bool
143-
DefaultAllowMaintainerEdit bool
144-
EnableTimetracker bool
145-
AllowOnlyContributorsToTrackTime bool
146-
EnableIssueDependencies bool
147-
IsArchived bool
130+
131+
EnableProjects bool
132+
ProjectsMode string
133+
134+
EnableReleases bool
135+
136+
EnablePackages bool
137+
138+
EnablePulls bool
139+
PullsIgnoreWhitespace bool
140+
PullsAllowMerge bool
141+
PullsAllowRebase bool
142+
PullsAllowRebaseMerge bool
143+
PullsAllowSquash bool
144+
PullsAllowFastForwardOnly bool
145+
PullsAllowManualMerge bool
146+
PullsDefaultMergeStyle string
147+
EnableAutodetectManualMerge bool
148+
PullsAllowRebaseUpdate bool
149+
DefaultDeleteBranchAfterMerge bool
150+
DefaultAllowMaintainerEdit bool
151+
EnableTimetracker bool
152+
AllowOnlyContributorsToTrackTime bool
153+
EnableIssueDependencies bool
154+
155+
EnableActions bool
156+
157+
IsArchived bool
148158

149159
// Signing Settings
150160
TrustModel string

templates/repo/settings/options.tmpl

+19-1
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,15 @@
302302
<input class="enable-system" name="enable_code" type="checkbox"{{if $isCodeEnabled}} checked{{end}}>
303303
<label>{{ctx.Locale.Tr "repo.code.desc"}}</label>
304304
</div>
305+
<div class="inline field tw-pl-4">
306+
{{$unitCode := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeCode}}
307+
<label>{{ctx.Locale.Tr "repo.settings.default_permission_everyone_access"}}</label>
308+
<select name="default_code_everyone_access" class="ui selection dropdown">
309+
{{/* everyone access mode is different from others, none means it is unset and won't be applied */}}
310+
<option value="none" {{Iif (eq $unitCode.EveryoneAccessMode 0) "selected"}}>{{ctx.Locale.Tr "settings.permission_not_set"}}</option>
311+
<option value="read" {{Iif (eq $unitCode.EveryoneAccessMode 1) "selected"}}>{{ctx.Locale.Tr "settings.permission_read"}}</option>
312+
</select>
313+
</div>
305314
</div>
306315

307316
{{$isInternalWikiEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeWiki}}
@@ -331,7 +340,7 @@
331340
</div>
332341
<div class="inline field">
333342
{{$unitInternalWiki := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeWiki}}
334-
<label>{{ctx.Locale.Tr "repo.settings.default_wiki_everyone_access"}}</label>
343+
<label>{{ctx.Locale.Tr "repo.settings.default_permission_everyone_access"}}</label>
335344
<select name="default_wiki_everyone_access" class="ui selection dropdown">
336345
{{/* everyone access mode is different from others, none means it is unset and won't be applied */}}
337346
<option value="none" {{Iif (eq $unitInternalWiki.EveryoneAccessMode 0) "selected"}}>{{ctx.Locale.Tr "settings.permission_not_set"}}</option>
@@ -374,6 +383,15 @@
374383
</div>
375384
</div>
376385
<div class="field tw-pl-4 {{if (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker)}}disabled{{end}}" id="internal_issue_box">
386+
<div class="inline field">
387+
{{$unitIssue := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeIssues}}
388+
<label>{{ctx.Locale.Tr "repo.settings.default_permission_everyone_access"}}</label>
389+
<select name="default_issues_everyone_access" class="ui selection dropdown">
390+
{{/* everyone access mode is different from others, none means it is unset and won't be applied */}}
391+
<option value="none" {{Iif (eq $unitIssue.EveryoneAccessMode 0) "selected"}}>{{ctx.Locale.Tr "settings.permission_not_set"}}</option>
392+
<option value="read" {{Iif (eq $unitIssue.EveryoneAccessMode 1) "selected"}}>{{ctx.Locale.Tr "settings.permission_read"}}</option>
393+
</select>
394+
</div>
377395
{{if .Repository.CanEnableTimetracker}}
378396
<div class="field">
379397
<div class="ui checkbox">

0 commit comments

Comments
 (0)