Implemented method to delete a namespace
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
43
models/namespace_delete.go
Normal file
43
models/namespace_delete.go
Normal 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
|
||||
}
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user