1
0

Implemented method to delete a namespace

This commit is contained in:
kolaente
2018-07-04 19:21:04 +02:00
parent 2d81330b27
commit 93efaa95f8
10 changed files with 178 additions and 15 deletions

View File

@ -258,4 +258,18 @@ func (err ErrUserDoesNotHaveAccessToNamespace) Error() string {
return fmt.Sprintf("You need to be namespace owner to do that [NamespaceID: %d, UserID: %d]", err.NamespaceID, err.UserID)
}
// ErrUserNeedsToBeNamespaceAdmin represents an error, where the user is not the owner of that namespace (used i.e. when deleting a namespace)
type ErrUserNeedsToBeNamespaceAdmin struct {
NamespaceID int64
UserID int64
}
// IsErrUserNeedsToBeNamespaceAdmin checks if an error is a ErrNamespaceDoesNotExist.
func IsErrUserNeedsToBeNamespaceAdmin(err error) bool {
_, ok := err.(ErrUserNeedsToBeNamespaceAdmin)
return ok
}
func (err ErrUserNeedsToBeNamespaceAdmin) Error() string {
return fmt.Sprintf("You need to be namespace owner to do that [NamespaceID: %d, UserID: %d]", err.NamespaceID, err.UserID)
}

View File

@ -11,8 +11,8 @@ type List struct {
Owner User `xorm:"-" json:"owner"`
Items []*ListItem `xorm:"-" json:"items"`
Created int64 `xorm:"created" json:"created"`
Updated int64 `xorm:"updated" json:"updated"`
Created int64 `xorm:"created" json:"created"`
Updated int64 `xorm:"updated" json:"updated"`
}
// GetListByID returns a list by its ID

View File

@ -0,0 +1,43 @@
package models
func DeleteNamespaceByID(namespaceID int64, doer *User) (err error) {
// Check if the namespace exists
namespace, err := GetNamespaceByID(namespaceID)
if err != nil {
return
}
// Check if the user is namespace admin
err = doer.IsNamespaceAdmin(&namespace)
if err != nil {
return
}
// Delete the namespace
_, err = x.ID(namespaceID).Delete(&Namespace{})
if err != nil {
return
}
// Delete all lists with their items
lists, err := GetListsByNamespaceID(namespaceID)
var listIDs []int64
for _, list := range lists {
listIDs = append(listIDs, list.ID)
}
// Delete items
_, err = x.In("list_id", listIDs).Delete(&ListItem{})
if err != nil {
return
}
// Delete the lists
_, err = x.In("id", listIDs).Delete(&List{})
if err != nil {
return
}
return
}

View File

@ -36,15 +36,15 @@ const (
NamespaceRightAdmin
)
func (user *User) IsNamespaceAdmin(namespace *Namespace) (ok bool, err error) {
func (user *User) IsNamespaceAdmin(namespace *Namespace) (err error) {
// Owners always have admin rights
if user.ID == namespace.Owner.ID {
return true, nil
return nil
}
// Check if that user is in a team which has admin rights to that namespace
return
return ErrUserNeedsToBeNamespaceAdmin{UserID: user.ID, NamespaceID: namespace.ID}
}
func (user *User) HasNamespaceAccess(namespace *Namespace) (err error) {
@ -55,7 +55,7 @@ func (user *User) HasNamespaceAccess(namespace *Namespace) (err error) {
// Check if the user is in a team which has access to the namespace
return ErrUserDoesNotHaveAccessToNamespace{UserID:user.ID, NamespaceID:namespace.ID}
return ErrUserDoesNotHaveAccessToNamespace{UserID: user.ID, NamespaceID: namespace.ID}
}
func GetNamespaceByID(id int64) (namespace Namespace, err error) {