Skip to content

Commit

Permalink
Max permission of external wiki and issues should be read
Browse files Browse the repository at this point in the history
  • Loading branch information
lunny committed Dec 2, 2021
1 parent 71a5284 commit f0a6e8c
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 52 deletions.
16 changes: 0 additions & 16 deletions models/perm/access_mode.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ package perm
import (
"fmt"

unit_model "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/log"
)

Expand Down Expand Up @@ -62,18 +61,3 @@ func ParseAccessMode(permission string) AccessMode {
return AccessModeNone
}
}

// MinUnitPerms returns the minial permission of the permission map
func MinUnitPerms(unitsMap map[unit_model.Type]AccessMode) AccessMode {
var res = AccessModeNone
for _, mode := range unitsMap {
if mode > AccessModeNone {
if res == AccessModeNone {
res = mode
} else if mode < res {
res = mode
}
}
}
return res
}
35 changes: 30 additions & 5 deletions models/unit/unit.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"strings"

"code.gitea.io/gitea/models/perm"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
Expand Down Expand Up @@ -171,11 +172,12 @@ func (u *Type) CanBeDefault() bool {

// Unit is a section of one repository
type Unit struct {
Type Type
NameKey string
URI string
DescKey string
Idx int
Type Type
NameKey string
URI string
DescKey string
Idx int
MaxPerms perm.AccessMode
}

// CanDisable returns if this unit could be disabled.
Expand All @@ -199,6 +201,7 @@ var (
"/",
"repo.code.desc",
0,
perm.AccessModeOwner,
}

UnitIssues = Unit{
Expand All @@ -207,6 +210,7 @@ var (
"/issues",
"repo.issues.desc",
1,
perm.AccessModeOwner,
}

UnitExternalTracker = Unit{
Expand All @@ -215,6 +219,7 @@ var (
"/issues",
"repo.ext_issues.desc",
1,
perm.AccessModeRead,
}

UnitPullRequests = Unit{
Expand All @@ -223,6 +228,7 @@ var (
"/pulls",
"repo.pulls.desc",
2,
perm.AccessModeOwner,
}

UnitReleases = Unit{
Expand All @@ -231,6 +237,7 @@ var (
"/releases",
"repo.releases.desc",
3,
perm.AccessModeOwner,
}

UnitWiki = Unit{
Expand All @@ -239,6 +246,7 @@ var (
"/wiki",
"repo.wiki.desc",
4,
perm.AccessModeOwner,
}

UnitExternalWiki = Unit{
Expand All @@ -247,6 +255,7 @@ var (
"/wiki",
"repo.ext_wiki.desc",
4,
perm.AccessModeRead,
}

UnitProjects = Unit{
Expand All @@ -255,6 +264,7 @@ var (
"/projects",
"repo.projects.desc",
5,
perm.AccessModeOwner,
}

// Units contains all the units
Expand Down Expand Up @@ -306,3 +316,18 @@ func AllUnitKeyNames() []string {
}
return res
}

// MinUnitPerms returns the minial permission of the permission map
func MinUnitPerms(unitsMap map[Type]perm.AccessMode) perm.AccessMode {
var res = perm.AccessModeNone
for _, mode := range unitsMap {
if mode > perm.AccessModeNone {
if res == perm.AccessModeNone {
res = mode
} else if mode < res {
res = mode
}
}
}
return res
}
5 changes: 3 additions & 2 deletions routers/api/v1/org/team.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/perm"
"code.gitea.io/gitea/models/unit"
unit_model "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/convert"
Expand Down Expand Up @@ -209,7 +210,7 @@ func CreateTeam(ctx *context.APIContext) {

var p = perm.ParseAccessMode(form.Permission)
if p < perm.AccessModeAdmin && len(form.UnitsMap) > 0 {
p = perm.MinUnitPerms(convertUnitsMap(form.UnitsMap))
p = unit.MinUnitPerms(convertUnitsMap(form.UnitsMap))
}

team := &models.Team{
Expand Down Expand Up @@ -293,7 +294,7 @@ func EditTeam(ctx *context.APIContext) {
// Validate permission level.
var p = perm.ParseAccessMode(form.Permission)
if p < perm.AccessModeAdmin && len(form.UnitsMap) > 0 {
p = perm.MinUnitPerms(convertUnitsMap(form.UnitsMap))
p = unit.MinUnitPerms(convertUnitsMap(form.UnitsMap))
}

if team.Authorize != p {
Expand Down
3 changes: 2 additions & 1 deletion routers/web/org/teams.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (

"code.gitea.io/gitea/models"
"code.gitea.io/gitea/models/perm"
"code.gitea.io/gitea/models/unit"
unit_model "code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/base"
Expand Down Expand Up @@ -249,7 +250,7 @@ func NewTeamPost(ctx *context.Context) {
var unitPerms = getUnitPerms(ctx.Req.Form)
var p = perm.ParseAccessMode(form.Permission)
if p < perm.AccessModeAdmin {
p = perm.MinUnitPerms(unitPerms)
p = unit.MinUnitPerms(unitPerms)
}

t := &models.Team{
Expand Down
58 changes: 30 additions & 28 deletions templates/org/team/new.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -89,35 +89,37 @@
</thead>
<tbody>
{{range $t, $unit := $.Units}}
<tr>
<td>
{{if $unit.Type.UnitGlobalDisabled}}
<div class="field tooltip" data-content="{{$.i18n.Tr "repo.unit_disabled"}}">
{{else}}
<div class="field">
{{end}}
<div class="ui">
<label>{{$.i18n.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{$.i18n.Tr "org.team_unit_disabled"}}{{end}}</label>
<span class="help">{{$.i18n.Tr $unit.DescKey}}</span>
<tr>
<td>
{{if $unit.Type.UnitGlobalDisabled}}
<div class="field tooltip" data-content="{{$.i18n.Tr "repo.unit_disabled"}}">
{{else}}
<div class="field">
{{end}}
<div class="ui">
<label>{{$.i18n.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{$.i18n.Tr "org.team_unit_disabled"}}{{end}}</label>
<span class="help">{{$.i18n.Tr $unit.DescKey}}</span>
</div>
</div>
</div>
</td>
<td class="center aligned">
<div class="ui radio checkbox">
<input type="radio" class="hidden" name="unit_{{$unit.Type.Value}}" value="0"{{if (eq ($.Team.UnitAccessMode $unit.Type) 0)}} checked{{end}}>
</div>
</td>
<td class="center aligned">
<div class="ui radio checkbox">
<input type="radio" class="hidden" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $unit.Type) 1)}} checked{{end}}>
</div>
</td>
<td class="center aligned">
<div class="ui radio checkbox">
<input type="radio" class="hidden" name="unit_{{$unit.Type.Value}}" value="2"{{if (eq ($.Team.UnitAccessMode $unit.Type) 2)}} checked{{end}}>
</div>
</td>
</tr>
</td>
<td class="center aligned">
<div class="ui radio checkbox">
<input type="radio" class="hidden" name="unit_{{$unit.Type.Value}}" value="0"{{if or ($unit.Type.UnitGlobalDisabled) (eq ($.Team.UnitAccessMode $unit.Type) 0)}} checked{{end}}>
</div>
</td>
<td class="center aligned">
<div class="ui radio checkbox">
<input type="radio" class="hidden" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}}>
</div>
</td>
<td class="center aligned">
{{if ge $unit.MaxPerms 2}}
<div class="ui radio checkbox">
<input type="radio" class="hidden" name="unit_{{$unit.Type.Value}}" value="2"{{if (eq ($.Team.UnitAccessMode $unit.Type) 2)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}}>
</div>
{{end}}
</td>
</tr>
{{end}}
</tbody>
</table>
Expand Down

0 comments on commit f0a6e8c

Please sign in to comment.