Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3b93d82

Browse files
committed
fix: correct user roles being passed into terraform context
1 parent 183146e commit 3b93d82

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

coderd/provisionerdserver/provisionerdserver.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -595,17 +595,20 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
595595
})
596596
}
597597

598-
roles, err := s.Database.GetAuthorizationUserRoles(ctx, owner.ID)
598+
allUserRoles, err := s.Database.GetAuthorizationUserRoles(ctx, owner.ID)
599599
if err != nil {
600600
return nil, failJob(fmt.Sprintf("get owner authorization roles: %s", err))
601601
}
602602
ownerRbacRoles := []*sdkproto.Role{}
603-
for _, role := range roles.Roles {
604-
if s.OrganizationID == uuid.Nil {
605-
ownerRbacRoles = append(ownerRbacRoles, &sdkproto.Role{Name: role, OrgId: ""})
606-
continue
603+
roles, err := allUserRoles.RoleNames()
604+
if err == nil {
605+
for _, role := range roles {
606+
orgID := role.OrganizationID.String()
607+
if role.OrganizationID == uuid.Nil {
608+
orgID = ""
609+
}
610+
ownerRbacRoles = append(ownerRbacRoles, &sdkproto.Role{Name: role.Name, OrgId: orgID})
607611
}
608-
ownerRbacRoles = append(ownerRbacRoles, &sdkproto.Role{Name: role, OrgId: s.OrganizationID.String()})
609612
}
610613

611614
protoJob.Type = &proto.AcquiredJob_WorkspaceBuild_{

coderd/provisionerdserver/provisionerdserver_test.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"encoding/json"
77
"io"
88
"net/url"
9+
"slices"
910
"strconv"
1011
"strings"
1112
"sync"
@@ -22,6 +23,7 @@ import (
2223
"storj.io/drpc"
2324

2425
"cdr.dev/slog/sloggers/slogtest"
26+
"github.com/coder/coder/v2/coderd/rbac"
2527
"github.com/coder/quartz"
2628
"github.com/coder/serpent"
2729

@@ -203,6 +205,12 @@ func TestAcquireJob(t *testing.T) {
203205
GroupID: group1.ID,
204206
})
205207
require.NoError(t, err)
208+
dbgen.OrganizationMember(t, db, database.OrganizationMember{
209+
UserID: user.ID,
210+
OrganizationID: pd.OrganizationID,
211+
Roles: []string{rbac.RoleOrgAuditor()},
212+
})
213+
206214
link := dbgen.UserLink(t, db, database.UserLink{
207215
LoginType: database.LoginTypeOIDC,
208216
UserID: user.ID,
@@ -350,7 +358,7 @@ func TestAcquireJob(t *testing.T) {
350358
WorkspaceOwnerEmail: user.Email,
351359
WorkspaceOwnerName: user.Name,
352360
WorkspaceOwnerOidcAccessToken: link.OAuthAccessToken,
353-
WorkspaceOwnerGroups: []string{group1.Name},
361+
WorkspaceOwnerGroups: []string{"Everyone", group1.Name},
354362
WorkspaceId: workspace.ID.String(),
355363
WorkspaceOwnerId: user.ID.String(),
356364
TemplateId: template.ID.String(),
@@ -361,11 +369,15 @@ func TestAcquireJob(t *testing.T) {
361369
WorkspaceOwnerSshPrivateKey: sshKey.PrivateKey,
362370
WorkspaceBuildId: build.ID.String(),
363371
WorkspaceOwnerLoginType: string(user.LoginType),
364-
WorkspaceOwnerRbacRoles: []*sdkproto.Role{{Name: "member", OrgId: pd.OrganizationID.String()}},
372+
WorkspaceOwnerRbacRoles: []*sdkproto.Role{{Name: rbac.RoleOrgMember(), OrgId: pd.OrganizationID.String()}, {Name: "member", OrgId: ""}, {Name: rbac.RoleOrgAuditor(), OrgId: pd.OrganizationID.String()}},
365373
}
366374
if prebuiltWorkspace {
367375
wantedMetadata.IsPrebuild = true
368376
}
377+
378+
slices.SortFunc(wantedMetadata.WorkspaceOwnerRbacRoles, func(a, b *sdkproto.Role) int {
379+
return strings.Compare(a.Name+a.OrgId, b.Name+b.OrgId)
380+
})
369381
want, err := json.Marshal(&proto.AcquiredJob_WorkspaceBuild_{
370382
WorkspaceBuild: &proto.AcquiredJob_WorkspaceBuild{
371383
WorkspaceBuildId: build.ID.String(),
@@ -467,6 +479,13 @@ func TestAcquireJob(t *testing.T) {
467479
job, err := tc.acquire(ctx, srv)
468480
require.NoError(t, err)
469481

482+
// sort
483+
if wk, ok := job.Type.(*proto.AcquiredJob_WorkspaceBuild_); ok {
484+
slices.SortFunc(wk.WorkspaceBuild.Metadata.WorkspaceOwnerRbacRoles, func(a, b *sdkproto.Role) int {
485+
return strings.Compare(a.Name+a.OrgId, b.Name+b.OrgId)
486+
})
487+
}
488+
470489
got, err := json.Marshal(job.Type)
471490
require.NoError(t, err)
472491

0 commit comments

Comments
 (0)