| @@ -11,11 +11,11 @@ | |||||
| [[projects]] | [[projects]] | ||||
| branch = "master" | branch = "master" | ||||
| digest = "1:bf4f822f636b99ac7d4f8fa5210a7439bacaf8d1f15d5783956bdd5dd2069bdc" | |||||
| digest = "1:b194da40b41ae99546dfeec5a85f1fec2a6c51350d438e511ef90f4293c6dcd7" | |||||
| name = "code.gitea.io/sdk" | name = "code.gitea.io/sdk" | ||||
| packages = ["gitea"] | packages = ["gitea"] | ||||
| pruneopts = "NUT" | pruneopts = "NUT" | ||||
| revision = "11c860c8e49a23be26e6d6c6a039a46ad2ae1d27" | |||||
| revision = "4f96d9ac89886e78c50de8c835ebe87461578a5e" | |||||
| [[projects]] | [[projects]] | ||||
| digest = "1:3fcef06a1a6561955c94af6c7757a6fa37605eb653f0d06ab960e5bb80092195" | digest = "1:3fcef06a1a6561955c94af6c7757a6fa37605eb653f0d06ab960e5bb80092195" | ||||
| @@ -40,6 +40,14 @@ func (t *Team) getUnits(e Engine) (err error) { | |||||
| return err | 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. | // HasWriteAccess returns true if team has at least write level access mode. | ||||
| func (t *Team) HasWriteAccess() bool { | func (t *Team) HasWriteAccess() bool { | ||||
| return t.Authorize >= AccessModeWrite | return t.Authorize >= AccessModeWrite | ||||
| @@ -367,6 +375,24 @@ func UpdateTeam(t *Team, authChanged bool) (err error) { | |||||
| return fmt.Errorf("update: %v", err) | 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. | // Update access for team members if needed. | ||||
| if authChanged { | if authChanged { | ||||
| if err = t.getRepositories(sess); err != nil { | if err = t.getRepositories(sess); err != nil { | ||||
| @@ -4,6 +4,10 @@ | |||||
| package models | package models | ||||
| import ( | |||||
| "strings" | |||||
| ) | |||||
| // UnitType is Unit's Type | // UnitType is Unit's Type | ||||
| type UnitType int | type UnitType int | ||||
| @@ -137,3 +141,16 @@ var ( | |||||
| UnitTypeExternalWiki: UnitExternalWiki, | 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, | Name: team.Name, | ||||
| Description: team.Description, | Description: team.Description, | ||||
| Permission: team.Authorize.String(), | Permission: team.Authorize.String(), | ||||
| Units: team.GetUnitNames(), | |||||
| } | } | ||||
| } | } | ||||
| @@ -90,6 +90,20 @@ func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) { | |||||
| Description: form.Description, | Description: form.Description, | ||||
| Authorize: models.ParseAccessMode(form.Permission), | 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 err := models.NewTeam(team); err != nil { | ||||
| if models.IsErrTeamAlreadyExist(err) { | if models.IsErrTeamAlreadyExist(err) { | ||||
| ctx.Error(422, "", err) | ctx.Error(422, "", err) | ||||
| @@ -128,6 +142,19 @@ func EditTeam(ctx *context.APIContext, form api.EditTeamOption) { | |||||
| team.Name = form.Name | team.Name = form.Name | ||||
| team.Description = form.Description | team.Description = form.Description | ||||
| team.Authorize = models.ParseAccessMode(form.Permission) | 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 { | if err := models.UpdateTeam(team, true); err != nil { | ||||
| ctx.Error(500, "EditTeam", err) | ctx.Error(500, "EditTeam", err) | ||||
| return | return | ||||
| @@ -6322,6 +6322,22 @@ | |||||
| "admin" | "admin" | ||||
| ], | ], | ||||
| "x-go-name": "Permission" | "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" | "x-go-package": "code.gitea.io/gitea/vendor/code.gitea.io/sdk/gitea" | ||||
| @@ -6697,6 +6713,22 @@ | |||||
| "admin" | "admin" | ||||
| ], | ], | ||||
| "x-go-name": "Permission" | "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" | "x-go-package": "code.gitea.io/gitea/vendor/code.gitea.io/sdk/gitea" | ||||
| @@ -7744,6 +7776,22 @@ | |||||
| "owner" | "owner" | ||||
| ], | ], | ||||
| "x-go-name": "Permission" | "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" | "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 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 | // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||
| @@ -11,6 +12,8 @@ type Team struct { | |||||
| Description string `json:"description"` | Description string `json:"description"` | ||||
| // enum: none,read,write,admin,owner | // enum: none,read,write,admin,owner | ||||
| Permission string `json:"permission"` | 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 | // CreateTeamOption options for creating a team | ||||
| @@ -20,6 +23,8 @@ type CreateTeamOption struct { | |||||
| Description string `json:"description" binding:"MaxSize(255)"` | Description string `json:"description" binding:"MaxSize(255)"` | ||||
| // enum: read,write,admin | // enum: read,write,admin | ||||
| Permission string `json:"permission"` | 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 | // EditTeamOption options for editing a team | ||||
| @@ -29,4 +34,6 @@ type EditTeamOption struct { | |||||
| Description string `json:"description" binding:"MaxSize(255)"` | Description string `json:"description" binding:"MaxSize(255)"` | ||||
| // enum: read,write,admin | // enum: read,write,admin | ||||
| Permission string `json:"permission"` | 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"` | |||||
| } | } | ||||