Skip to content

Commit 0b53b06

Browse files
authored
chore: Make member role struct match site roles (#3671)
1 parent 076c4a0 commit 0b53b06

File tree

5 files changed

+46
-15
lines changed

5 files changed

+46
-15
lines changed

coderd/members.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,17 @@ func (api *API) updateOrganizationMemberRoles(ctx context.Context, args database
105105
}
106106

107107
func convertOrganizationMember(mem database.OrganizationMember) codersdk.OrganizationMember {
108-
return codersdk.OrganizationMember{
108+
convertedMember := codersdk.OrganizationMember{
109109
UserID: mem.UserID,
110110
OrganizationID: mem.OrganizationID,
111111
CreatedAt: mem.CreatedAt,
112112
UpdatedAt: mem.UpdatedAt,
113-
Roles: mem.Roles,
113+
Roles: make([]codersdk.Role, 0, len(mem.Roles)),
114114
}
115+
116+
for _, roleName := range mem.Roles {
117+
rbacRole, _ := rbac.RoleByName(roleName)
118+
convertedMember.Roles = append(convertedMember.Roles, convertRole(rbacRole))
119+
}
120+
return convertedMember
115121
}

coderd/users.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1000,7 +1000,7 @@ func convertUser(user database.User, organizationIDs []uuid.UUID) codersdk.User
10001000
Username: user.Username,
10011001
Status: codersdk.UserStatus(user.Status),
10021002
OrganizationIDs: organizationIDs,
1003-
Roles: make([]codersdk.Role, 0),
1003+
Roles: make([]codersdk.Role, 0, len(user.RBACRoles)),
10041004
}
10051005

10061006
for _, roleName := range user.RBACRoles {

coderd/users_test.go

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -489,17 +489,19 @@ func TestGrantSiteRoles(t *testing.T) {
489489
})
490490
require.NoError(t, err)
491491
_, randOrgUser := coderdtest.CreateAnotherUserWithUser(t, admin, randOrg.ID, rbac.RoleOrgAdmin(randOrg.ID))
492+
userAdmin := coderdtest.CreateAnotherUser(t, admin, first.OrganizationID, rbac.RoleUserAdmin())
492493

493494
const newUser = "newUser"
494495

495496
testCases := []struct {
496-
Name string
497-
Client *codersdk.Client
498-
OrgID uuid.UUID
499-
AssignToUser string
500-
Roles []string
501-
Error bool
502-
StatusCode int
497+
Name string
498+
Client *codersdk.Client
499+
OrgID uuid.UUID
500+
AssignToUser string
501+
Roles []string
502+
ExpectedRoles []string
503+
Error bool
504+
StatusCode int
503505
}{
504506
{
505507
Name: "OrgRoleInSite",
@@ -576,7 +578,20 @@ func TestGrantSiteRoles(t *testing.T) {
576578
OrgID: first.OrganizationID,
577579
AssignToUser: newUser,
578580
Roles: []string{rbac.RoleOrgAdmin(first.OrganizationID)},
579-
Error: false,
581+
ExpectedRoles: []string{
582+
rbac.RoleOrgAdmin(first.OrganizationID),
583+
},
584+
Error: false,
585+
},
586+
{
587+
Name: "UserAdminMakeMember",
588+
Client: userAdmin,
589+
AssignToUser: newUser,
590+
Roles: []string{rbac.RoleMember()},
591+
ExpectedRoles: []string{
592+
rbac.RoleMember(),
593+
},
594+
Error: false,
580595
},
581596
}
582597

@@ -597,23 +612,33 @@ func TestGrantSiteRoles(t *testing.T) {
597612
c.AssignToUser = newUser.ID.String()
598613
}
599614

615+
var newRoles []codersdk.Role
600616
if c.OrgID != uuid.Nil {
601617
// Org assign
602-
_, err = c.Client.UpdateOrganizationMemberRoles(ctx, c.OrgID, c.AssignToUser, codersdk.UpdateRoles{
618+
var mem codersdk.OrganizationMember
619+
mem, err = c.Client.UpdateOrganizationMemberRoles(ctx, c.OrgID, c.AssignToUser, codersdk.UpdateRoles{
603620
Roles: c.Roles,
604621
})
622+
newRoles = mem.Roles
605623
} else {
606624
// Site assign
607-
_, err = c.Client.UpdateUserRoles(ctx, c.AssignToUser, codersdk.UpdateRoles{
625+
var user codersdk.User
626+
user, err = c.Client.UpdateUserRoles(ctx, c.AssignToUser, codersdk.UpdateRoles{
608627
Roles: c.Roles,
609628
})
629+
newRoles = user.Roles
610630
}
611631

612632
if c.Error {
613633
require.Error(t, err)
614634
requireStatusCode(t, err, c.StatusCode)
615635
} else {
616636
require.NoError(t, err)
637+
roles := make([]string, 0, len(newRoles))
638+
for _, r := range newRoles {
639+
roles = append(roles, r.Name)
640+
}
641+
require.ElementsMatch(t, roles, c.ExpectedRoles)
617642
}
618643
})
619644
}

codersdk/organizationmember.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ type OrganizationMember struct {
1111
OrganizationID uuid.UUID `db:"organization_id" json:"organization_id"`
1212
CreatedAt time.Time `db:"created_at" json:"created_at"`
1313
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
14-
Roles []string `db:"roles" json:"roles"`
14+
Roles []Role `db:"roles" json:"roles"`
1515
}

site/src/api/typesGenerated.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ export interface OrganizationMember {
206206
readonly organization_id: string
207207
readonly created_at: string
208208
readonly updated_at: string
209-
readonly roles: string[]
209+
readonly roles: Role[]
210210
}
211211

212212
// From codersdk/pagination.go

0 commit comments

Comments
 (0)