diff --git a/pkg/models/user_group.go b/pkg/models/user_group.go index e47b094e33a..16f92046a3a 100644 --- a/pkg/models/user_group.go +++ b/pkg/models/user_group.go @@ -45,6 +45,11 @@ type GetUserGroupByIdQuery struct { Result *UserGroup } +type GetUserGroupsByUserQuery struct { + UserId int64 `json:"userId"` + Result []*UserGroup `json:"userGroups"` +} + type SearchUserGroupsQuery struct { Query string Name string diff --git a/pkg/services/sqlstore/user_group.go b/pkg/services/sqlstore/user_group.go index 7c8d6fd666c..0f256f24de3 100644 --- a/pkg/services/sqlstore/user_group.go +++ b/pkg/services/sqlstore/user_group.go @@ -16,6 +16,7 @@ func init() { bus.AddHandler("sql", DeleteUserGroup) bus.AddHandler("sql", SearchUserGroups) bus.AddHandler("sql", GetUserGroupById) + bus.AddHandler("sql", GetUserGroupsByUser) bus.AddHandler("sql", AddUserGroupMember) bus.AddHandler("sql", RemoveUserGroupMember) @@ -162,6 +163,21 @@ func GetUserGroupById(query *m.GetUserGroupByIdQuery) error { return nil } +func GetUserGroupsByUser(query *m.GetUserGroupsByUserQuery) error { + query.Result = make([]*m.UserGroup, 0) + + sess := x.Table("user_group") + sess.Join("INNER", "user_group_member", "user_group.id=user_group_member.user_group_id") + sess.Where("user_group_member.user_id=?", query.UserId) + + err := sess.Find(&query.Result) + if err != nil { + return err + } + + return nil +} + func AddUserGroupMember(cmd *m.AddUserGroupMemberCommand) error { return inTransaction(func(sess *xorm.Session) error { if res, err := sess.Query("SELECT 1 from user_group_member WHERE user_group_id=? and user_id=?", cmd.UserGroupId, cmd.UserId); err != nil { diff --git a/pkg/services/sqlstore/user_group_test.go b/pkg/services/sqlstore/user_group_test.go index 63fddc89012..5e83d95d685 100644 --- a/pkg/services/sqlstore/user_group_test.go +++ b/pkg/services/sqlstore/user_group_test.go @@ -67,6 +67,17 @@ func TestUserGroupCommandsAndQueries(t *testing.T) { So(len(query2.Result.UserGroups), ShouldEqual, 2) }) + Convey("Should be able to return all user groups a user is member of", func() { + groupId := group2.Result.Id + err := AddUserGroupMember(&m.AddUserGroupMemberCommand{OrgId: 1, UserGroupId: groupId, UserId: userIds[0]}) + + query := &m.GetUserGroupsByUserQuery{UserId: userIds[0]} + err = GetUserGroupsByUser(query) + So(err, ShouldBeNil) + So(len(query.Result), ShouldEqual, 1) + So(query.Result[0].Name, ShouldEqual, "group2 name") + }) + Convey("Should be able to remove users from a group", func() { err = RemoveUserGroupMember(&m.RemoveUserGroupMemberCommand{UserGroupId: group1.Result.Id, UserId: userIds[0]}) So(err, ShouldBeNil) diff --git a/public/app/features/org/partials/user_groups.html b/public/app/features/org/partials/user_groups.html index 2ad6c41a50b..adc7a68ccaa 100644 --- a/public/app/features/org/partials/user_groups.html +++ b/public/app/features/org/partials/user_groups.html @@ -5,12 +5,10 @@
diff --git a/public/app/features/org/user_groups_ctrl.ts b/public/app/features/org/user_groups_ctrl.ts index 6143e7364a4..e0e4a1b8bce 100644 --- a/public/app/features/org/user_groups_ctrl.ts +++ b/public/app/features/org/user_groups_ctrl.ts @@ -63,14 +63,14 @@ export default class UserGroupsCtrl { .then(this.get.bind(this)); } - openModal() { + openUserGroupModal() { var modalScope = this.$scope.$new(); modalScope.createUserGroup = this.createUserGroup.bind(this); this.$scope.appEvent('show-modal', { src: 'public/app/features/org/partials/create_user_group.html', modalClass: 'user-group-modal', - scope: this.$scope + scope: modalScope }); } }