From 552935031b32ec3a4f159c21222b58a30c8953b1 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Wed, 19 Apr 2017 15:35:11 +0200 Subject: [PATCH] WIP: API methods for add/remove members to user group --- pkg/api/api.go | 4 +++- pkg/api/user_group_members.go | 26 ++++++++++++++++++++++++++ pkg/models/user_group_member.go | 2 +- pkg/services/sqlstore/user_group.go | 1 + 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pkg/api/api.go b/pkg/api/api.go index f8c8f3a04ac..ca33588f072 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -140,7 +140,9 @@ func (hs *HttpServer) registerRoutes() { r.Put("/:userGroupId", bind(m.UpdateUserGroupCommand{}), wrap(UpdateUserGroup)) r.Delete("/:userGroupId", wrap(DeleteUserGroupById)) r.Get("/:userGroupId/members", wrap(GetUserGroupMembers)) - }, reqGrafanaAdmin) + r.Post("/:userGroupId/members", quota("user-groups"), bind(m.AddUserGroupMemberCommand{}), wrap(AddUserGroupMember)) + r.Delete("/:userGroupId/members/:userId", wrap(RemoveUserGroupMember)) + }, reqOrgAdmin) // org information available to all users. r.Group("/org", func() { diff --git a/pkg/api/user_group_members.go b/pkg/api/user_group_members.go index b3d54a09623..09f3def59bd 100644 --- a/pkg/api/user_group_members.go +++ b/pkg/api/user_group_members.go @@ -4,6 +4,7 @@ import ( "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/middleware" m "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/util" ) // GET /api/user-groups/:userGroupId/members @@ -16,3 +17,28 @@ func GetUserGroupMembers(c *middleware.Context) Response { return Json(200, query.Result) } + +// POST /api/user-groups/:userGroupId/members +func AddUserGroupMember(c *middleware.Context, cmd m.AddUserGroupMemberCommand) Response { + cmd.UserGroupId = c.ParamsInt64(":userGroupId") + cmd.OrgId = c.OrgId + + if err := bus.Dispatch(&cmd); err != nil { + if err == m.ErrUserGroupMemberAlreadyAdded { + return ApiError(400, "User is already added to this user group", err) + } + return ApiError(500, "Failed to add Member to User Group", err) + } + + return Json(200, &util.DynMap{ + "message": "Member added to User Group", + }) +} + +// DELETE /api/user-groups/:userGroupId/members/:userId +func RemoveUserGroupMember(c *middleware.Context) Response { + if err := bus.Dispatch(&m.RemoveUserGroupMemberCommand{UserGroupId: c.ParamsInt64(":userGroupId"), UserId: c.ParamsInt64(":userId")}); err != nil { + return ApiError(500, "Failed to remove Member from User Group", err) + } + return ApiSuccess("User Group Member removed") +} diff --git a/pkg/models/user_group_member.go b/pkg/models/user_group_member.go index cd156b490cb..1c0324a1072 100644 --- a/pkg/models/user_group_member.go +++ b/pkg/models/user_group_member.go @@ -25,9 +25,9 @@ type UserGroupMember struct { // COMMANDS type AddUserGroupMemberCommand struct { + UserId int64 `json:"userId" binding:"Required"` OrgId int64 `json:"-"` UserGroupId int64 `json:"-"` - UserId int64 `json:"-"` } type RemoveUserGroupMemberCommand struct { diff --git a/pkg/services/sqlstore/user_group.go b/pkg/services/sqlstore/user_group.go index e548e5dd7c5..7c8d6fd666c 100644 --- a/pkg/services/sqlstore/user_group.go +++ b/pkg/services/sqlstore/user_group.go @@ -33,6 +33,7 @@ func CreateUserGroup(cmd *m.CreateUserGroupCommand) error { userGroup := m.UserGroup{ Name: cmd.Name, + OrgId: cmd.OrgId, Created: time.Now(), Updated: time.Now(), }