From ebb5b332b6beeb6d608225e7f0b675b0d4e09cd4 Mon Sep 17 00:00:00 2001 From: konrad Date: Wed, 18 Jul 2018 08:16:15 +0200 Subject: [PATCH] implemented delete team <-> namespace relation --- models/team_namespace_delete.go | 24 ++++++++++++++++++++++++ models/team_namespace_rights.go | 6 ++++++ routes/routes.go | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 models/team_namespace_delete.go diff --git a/models/team_namespace_delete.go b/models/team_namespace_delete.go new file mode 100644 index 000000000..9ee93f6fa --- /dev/null +++ b/models/team_namespace_delete.go @@ -0,0 +1,24 @@ +package models + +// Delete deletes a team <-> namespace relation based on the namespace & team id +func (tn *TeamNamespace) Delete() (err error) { + + // Check if the namespace exists + _, err = GetNamespaceByID(tn.NamespaceID) + if err != nil { + return + } + + // Check if the team exists + _, err = GetTeamByID(tn.TeamID) + if err != nil { + return + } + + // Delete the relation + _, err = x.Where("team_id = ?", tn.TeamID). + And("namespace_id = ?", tn.NamespaceID). + Delete(tn) + + return +} diff --git a/models/team_namespace_rights.go b/models/team_namespace_rights.go index b29dd6294..4eea988d3 100644 --- a/models/team_namespace_rights.go +++ b/models/team_namespace_rights.go @@ -5,3 +5,9 @@ func (tn *TeamNamespace) CanCreate(user *User, _ int64) bool { n, _ := GetNamespaceByID(tn.NamespaceID) return n.IsAdmin(user) } + +// CanDelete checks if a user can remove a team from a namespace. Only namespace admins can do that. +func (tn *TeamNamespace) CanDelete(user *User) bool { + n, _ := GetNamespaceByID(tn.NamespaceID) + return n.IsAdmin(user) +} \ No newline at end of file diff --git a/routes/routes.go b/routes/routes.go index ca72f1ab5..41124f3ef 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -118,7 +118,7 @@ func RegisterRoutes(e *echo.Echo) { } a.GET("/namespaces/:id/teams", namespaceTeamHandler.ReadAllWeb) a.PUT("/namespaces/:id/teams", namespaceTeamHandler.CreateWeb) - a.DELETE("/namespaces/:nid/teams/:id", namespaceTeamHandler.DeleteWeb) + a.DELETE("/namespaces/:nid/teams/:teamid", namespaceTeamHandler.DeleteWeb) teamHandler := &crud.WebHandler{ CObject: &models.Team{},