@@ -11,11 +11,11 @@ | |||
[[projects]] | |||
branch = "master" | |||
digest = "1:bf4f822f636b99ac7d4f8fa5210a7439bacaf8d1f15d5783956bdd5dd2069bdc" | |||
digest = "1:b194da40b41ae99546dfeec5a85f1fec2a6c51350d438e511ef90f4293c6dcd7" | |||
name = "code.gitea.io/sdk" | |||
packages = ["gitea"] | |||
pruneopts = "NUT" | |||
revision = "11c860c8e49a23be26e6d6c6a039a46ad2ae1d27" | |||
revision = "4f96d9ac89886e78c50de8c835ebe87461578a5e" | |||
[[projects]] | |||
digest = "1:3fcef06a1a6561955c94af6c7757a6fa37605eb653f0d06ab960e5bb80092195" |
@@ -40,6 +40,14 @@ func (t *Team) getUnits(e Engine) (err error) { | |||
return err | |||
} | |||
// GetUnitNames returns the team units names | |||
func (t *Team) GetUnitNames() (res []string) { | |||
for _, u := range t.Units { | |||
res = append(res, Units[u.Type].NameKey) | |||
} | |||
return | |||
} | |||
// HasWriteAccess returns true if team has at least write level access mode. | |||
func (t *Team) HasWriteAccess() bool { | |||
return t.Authorize >= AccessModeWrite | |||
@@ -367,6 +375,24 @@ func UpdateTeam(t *Team, authChanged bool) (err error) { | |||
return fmt.Errorf("update: %v", err) | |||
} | |||
// update units for team | |||
if len(t.Units) > 0 { | |||
for _, unit := range t.Units { | |||
unit.TeamID = t.ID | |||
} | |||
// Delete team-unit. | |||
if _, err := sess. | |||
Where("team_id=?", t.ID). | |||
Delete(new(TeamUnit)); err != nil { | |||
return err | |||
} | |||
if _, err = sess.Insert(&t.Units); err != nil { | |||
sess.Rollback() | |||
return err | |||
} | |||
} | |||
// Update access for team members if needed. | |||
if authChanged { | |||
if err = t.getRepositories(sess); err != nil { |
@@ -4,6 +4,10 @@ | |||
package models | |||
import ( | |||
"strings" | |||
) | |||
// UnitType is Unit's Type | |||
type UnitType int | |||
@@ -137,3 +141,16 @@ var ( | |||
UnitTypeExternalWiki: UnitExternalWiki, | |||
} | |||
) | |||
// FindUnitTypes give the unit key name and return unit | |||
func FindUnitTypes(nameKeys ...string) (res []UnitType) { | |||
for _, key := range nameKeys { | |||
for t, u := range Units { | |||
if strings.EqualFold(key, u.NameKey) { | |||
res = append(res, t) | |||
break | |||
} | |||
} | |||
} | |||
return | |||
} |
@@ -198,5 +198,6 @@ func ToTeam(team *models.Team) *api.Team { | |||
Name: team.Name, | |||
Description: team.Description, | |||
Permission: team.Authorize.String(), | |||
Units: team.GetUnitNames(), | |||
} | |||
} |
@@ -90,6 +90,20 @@ func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | |||
Description: form.Description, | |||
Authorize: models.ParseAccessMode(form.Permission), | |||
} | |||
unitTypes := models.FindUnitTypes(form.Units...) | |||
if team.Authorize < models.AccessModeOwner { | |||
var units = make([]*models.TeamUnit, 0, len(form.Units)) | |||
for _, tp := range unitTypes { | |||
units = append(units, &models.TeamUnit{ | |||
OrgID: ctx.Org.Organization.ID, | |||
Type: tp, | |||
}) | |||
} | |||
team.Units = units | |||
} | |||
if err := models.NewTeam(team); err != nil { | |||
if models.IsErrTeamAlreadyExist(err) { | |||
ctx.Error(422, "", err) | |||
@@ -128,6 +142,19 @@ func EditTeam(ctx *context.APIContext, form api.EditTeamOption) { | |||
team.Name = form.Name | |||
team.Description = form.Description | |||
team.Authorize = models.ParseAccessMode(form.Permission) | |||
unitTypes := models.FindUnitTypes(form.Units...) | |||
if team.Authorize < models.AccessModeOwner { | |||
var units = make([]*models.TeamUnit, 0, len(form.Units)) | |||
for _, tp := range unitTypes { | |||
units = append(units, &models.TeamUnit{ | |||
OrgID: ctx.Org.Organization.ID, | |||
Type: tp, | |||
}) | |||
} | |||
team.Units = units | |||
} | |||
if err := models.UpdateTeam(team, true); err != nil { | |||
ctx.Error(500, "EditTeam", err) | |||
return |
@@ -6322,6 +6322,22 @@ | |||
"admin" | |||
], | |||
"x-go-name": "Permission" | |||
}, | |||
"units": { | |||
"type": "array", | |||
"enum": [ | |||
"repo.code", | |||
"repo.issues", | |||
"repo.ext_issues", | |||
"repo.wiki", | |||
"repo.pulls", | |||
"repo.releases", | |||
"repo.ext_wiki" | |||
], | |||
"items": { | |||
"type": "string" | |||
}, | |||
"x-go-name": "Units" | |||
} | |||
}, | |||
"x-go-package": "code.gitea.io/gitea/vendor/code.gitea.io/sdk/gitea" | |||
@@ -6697,6 +6713,22 @@ | |||
"admin" | |||
], | |||
"x-go-name": "Permission" | |||
}, | |||
"units": { | |||
"type": "array", | |||
"enum": [ | |||
"repo.code", | |||
"repo.issues", | |||
"repo.ext_issues", | |||
"repo.wiki", | |||
"repo.pulls", | |||
"repo.releases", | |||
"repo.ext_wiki" | |||
], | |||
"items": { | |||
"type": "string" | |||
}, | |||
"x-go-name": "Units" | |||
} | |||
}, | |||
"x-go-package": "code.gitea.io/gitea/vendor/code.gitea.io/sdk/gitea" | |||
@@ -7744,6 +7776,22 @@ | |||
"owner" | |||
], | |||
"x-go-name": "Permission" | |||
}, | |||
"units": { | |||
"type": "array", | |||
"enum": [ | |||
"repo.code", | |||
"repo.issues", | |||
"repo.ext_issues", | |||
"repo.wiki", | |||
"repo.pulls", | |||
"repo.releases", | |||
"repo.ext_wiki" | |||
], | |||
"items": { | |||
"type": "string" | |||
}, | |||
"x-go-name": "Units" | |||
} | |||
}, | |||
"x-go-package": "code.gitea.io/gitea/vendor/code.gitea.io/sdk/gitea" |
@@ -1,4 +1,5 @@ | |||
// Copyright 2016 The Gogs Authors. All rights reserved. | |||
// Copyright 2018 The Gitea Authors. All rights reserved. | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
@@ -11,6 +12,8 @@ type Team struct { | |||
Description string `json:"description"` | |||
// enum: none,read,write,admin,owner | |||
Permission string `json:"permission"` | |||
// enum: repo.code,repo.issues,repo.ext_issues,repo.wiki,repo.pulls,repo.releases,repo.ext_wiki | |||
Units []string `json:"units"` | |||
} | |||
// CreateTeamOption options for creating a team | |||
@@ -20,6 +23,8 @@ type CreateTeamOption struct { | |||
Description string `json:"description" binding:"MaxSize(255)"` | |||
// enum: read,write,admin | |||
Permission string `json:"permission"` | |||
// enum: repo.code,repo.issues,repo.ext_issues,repo.wiki,repo.pulls,repo.releases,repo.ext_wiki | |||
Units []string `json:"units"` | |||
} | |||
// EditTeamOption options for editing a team | |||
@@ -29,4 +34,6 @@ type EditTeamOption struct { | |||
Description string `json:"description" binding:"MaxSize(255)"` | |||
// enum: read,write,admin | |||
Permission string `json:"permission"` | |||
// enum: repo.code,repo.issues,repo.ext_issues,repo.wiki,repo.pulls,repo.releases,repo.ext_wiki | |||
Units []string `json:"units"` | |||
} |