diff --git a/coderd/rbac/roles.go b/coderd/rbac/roles.go index 94ca6a875a..c9dc94c300 100644 --- a/coderd/rbac/roles.go +++ b/coderd/rbac/roles.go @@ -370,6 +370,7 @@ func ReloadBuiltinRoles(opts *RoleOptions) { // CRUD all files, even those they did not upload. ResourceFile.Type: {policy.ActionCreate, policy.ActionRead}, ResourceWorkspace.Type: {policy.ActionRead}, + ResourceWorkspaceDormant.Type: {policy.ActionRead}, ResourcePrebuiltWorkspace.Type: {policy.ActionUpdate, policy.ActionDelete}, // CRUD to provisioner daemons for now. ResourceProvisionerDaemon.Type: {policy.ActionCreate, policy.ActionRead, policy.ActionUpdate, policy.ActionDelete}, @@ -532,6 +533,7 @@ func ReloadBuiltinRoles(opts *RoleOptions) { ResourceTemplate.Type: ResourceTemplate.AvailableActions(), ResourceFile.Type: {policy.ActionCreate, policy.ActionRead}, ResourceWorkspace.Type: {policy.ActionRead}, + ResourceWorkspaceDormant.Type: {policy.ActionRead}, ResourcePrebuiltWorkspace.Type: {policy.ActionUpdate, policy.ActionDelete}, // Assigning template perms requires this permission. ResourceOrganization.Type: {policy.ActionRead}, diff --git a/coderd/rbac/roles_test.go b/coderd/rbac/roles_test.go index 212a1d48cd..a59f40461d 100644 --- a/coderd/rbac/roles_test.go +++ b/coderd/rbac/roles_test.go @@ -637,9 +637,18 @@ func TestRolePermissions(t *testing.T) { false: {setOtherOrg, memberMe, agentsAccessUser}, }, }, + { + Name: "WorkspaceDormantRead", + Actions: []policy.Action{policy.ActionRead}, + Resource: rbac.ResourceWorkspaceDormant.WithID(uuid.New()).InOrg(orgID).WithOwner(memberMe.Actor.ID), + AuthorizeMap: map[bool][]hasAuthSubjects{ + true: {orgAdmin, owner, templateAdmin, orgTemplateAdmin}, + false: {setOtherOrg, userAdmin, memberMe, agentsAccessUser, orgUserAdmin, orgAuditor}, + }, + }, { Name: "WorkspaceDormant", - Actions: append(crud, policy.ActionWorkspaceStop, policy.ActionCreateAgent, policy.ActionDeleteAgent, policy.ActionUpdateAgent), + Actions: []policy.Action{policy.ActionCreate, policy.ActionUpdate, policy.ActionDelete, policy.ActionWorkspaceStop, policy.ActionCreateAgent, policy.ActionDeleteAgent, policy.ActionUpdateAgent}, Resource: rbac.ResourceWorkspaceDormant.WithID(uuid.New()).InOrg(orgID).WithOwner(memberMe.Actor.ID), AuthorizeMap: map[bool][]hasAuthSubjects{ true: {orgAdmin, owner},