浏览代码

WIP: API methods for add/remove members to user group

Daniel Lee 8 年之前
父节点
当前提交
552935031b
共有 4 个文件被更改,包括 31 次插入2 次删除
  1. 3 1
      pkg/api/api.go
  2. 26 0
      pkg/api/user_group_members.go
  3. 1 1
      pkg/models/user_group_member.go
  4. 1 0
      pkg/services/sqlstore/user_group.go

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

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

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

+ 1 - 0
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(),
 		}