From 71f09ddd94987d094840069b4b7c21c925c1582b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 11 Feb 2015 16:47:22 +0100 Subject: [PATCH] Added delete user action to user admin api, and made it work in UI, Closes #1466, #1446 --- pkg/api/admin_users.go | 16 +++++++++++++--- pkg/api/api.go | 1 + pkg/models/user.go | 4 ++++ pkg/services/sqlstore/user.go | 10 ++++++++++ src/app/features/admin/adminUsersCtrl.js | 4 +++- src/app/features/admin/partials/users.html | 2 +- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/pkg/api/admin_users.go b/pkg/api/admin_users.go index 0ffe0612ac0..9402eb41b20 100644 --- a/pkg/api/admin_users.go +++ b/pkg/api/admin_users.go @@ -8,9 +8,6 @@ import ( ) func AdminSearchUsers(c *middleware.Context) { - // query := c.QueryStrings("q") - // page := c.QueryStrings("p") - query := m.SearchUsersQuery{Query: "", Page: 0, Limit: 20} if err := bus.Dispatch(&query); err != nil { c.JsonApiErr(500, "Failed to fetch users", err) @@ -93,3 +90,16 @@ func AdminUpdateUser(c *middleware.Context, form dtos.AdminUpdateUserForm) { c.JsonOK("User updated") } + +func AdminDeleteUser(c *middleware.Context) { + userId := c.ParamsInt64(":id") + + cmd := m.DeleteUserCommand{UserId: userId} + + if err := bus.Dispatch(&cmd); err != nil { + c.JsonApiErr(500, "Failed to delete user", err) + return + } + + c.JsonOK("User deleted") +} diff --git a/pkg/api/api.go b/pkg/api/api.go index 4da20db956f..a9f6b5d5dc6 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -98,6 +98,7 @@ func Register(r *macaron.Macaron) { r.Get("/users/:id", AdminGetUser) r.Post("/users", bind(dtos.AdminCreateUserForm{}), AdminCreateUser) r.Put("/users/:id", bind(dtos.AdminUpdateUserForm{}), AdminUpdateUser) + r.Delete("/users/:id", AdminDeleteUser) }, reqGrafanaAdmin) // rendering diff --git a/pkg/models/user.go b/pkg/models/user.go index b63ded299c7..10ec03791a3 100644 --- a/pkg/models/user.go +++ b/pkg/models/user.go @@ -50,6 +50,10 @@ type UpdateUserCommand struct { UserId int64 `json:"-"` } +type DeleteUserCommand struct { + UserId int64 +} + type SetUsingAccountCommand struct { UserId int64 AccountId int64 diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index ac7286af77c..2034b0ff347 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -1,6 +1,7 @@ package sqlstore import ( + "fmt" "strings" "time" @@ -23,6 +24,7 @@ func init() { bus.AddHandler("sql", GetSignedInUser) bus.AddHandler("sql", SearchUsers) bus.AddHandler("sql", GetUserAccounts) + bus.AddHandler("sql", DeleteUser) } func getAccountIdForNewUser(userEmail string, sess *session) (int64, error) { @@ -256,3 +258,11 @@ func SearchUsers(query *m.SearchUsersQuery) error { err := sess.Find(&query.Result) return err } + +func DeleteUser(cmd *m.DeleteUserCommand) error { + return inTransaction(func(sess *xorm.Session) error { + var rawSql = fmt.Sprintf("DELETE FROM %s WHERE id=?", x.Dialect().Quote("user")) + _, err := sess.Exec(rawSql, cmd.UserId) + return err + }) +} diff --git a/src/app/features/admin/adminUsersCtrl.js b/src/app/features/admin/adminUsersCtrl.js index ce5cc7a3b86..bf8e998a16f 100644 --- a/src/app/features/admin/adminUsersCtrl.js +++ b/src/app/features/admin/adminUsersCtrl.js @@ -24,7 +24,9 @@ function (angular) { title: 'Delete user', text: 'Are you sure you want to delete user: ' + user.login, onConfirm: function() { - backendSrv.delete('/api/admin/users/delete/' + user.id); + backendSrv.delete('/api/admin/users/' + user.id).then(function() { + $scope.getUsers(); + }); } }); }; diff --git a/src/app/features/admin/partials/users.html b/src/app/features/admin/partials/users.html index fb59f6ee514..5a5b2af97e0 100644 --- a/src/app/features/admin/partials/users.html +++ b/src/app/features/admin/partials/users.html @@ -33,7 +33,7 @@ Edit    - +