Browse Source

Added delete user action to user admin api, and made it work in UI, Closes #1466, #1446

Torkel Ödegaard 11 years ago
parent
commit
71f09ddd94

+ 13 - 3
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")
+}

+ 1 - 0
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

+ 4 - 0
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

+ 10 - 0
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
+	})
+}

+ 3 - 1
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();
+          });
         }
       });
     };

+ 1 - 1
src/app/features/admin/partials/users.html

@@ -33,7 +33,7 @@
 						Edit
 					</a>
 					&nbsp;&nbsp;
-					<a ng-click="delete(variable)" class="btn btn-danger btn-small">
+					<a ng-click="deleteUser(user)" class="btn btn-danger btn-small">
 						<i class="fa fa-remove"></i>
 					</a>
 				</td>