@@ -34,11 +34,12 @@ func TestInsertCustomRoles(t *testing.T) {
3434}
3535}
3636
37- canAssignRole := rbac.Role {
37+ canCreateCustomRole := rbac.Role {
3838Identifier : rbac.RoleIdentifier {Name :"can-assign" },
3939DisplayName :"" ,
4040Site :rbac .Permissions (map [string ][]policy.Action {
41- rbac .ResourceAssignRole .Type : {policy .ActionRead ,policy .ActionCreate },
41+ rbac .ResourceAssignRole .Type : {policy .ActionRead },
42+ rbac .ResourceAssignOrgRole .Type : {policy .ActionRead ,policy .ActionCreate },
4243}),
4344}
4445
@@ -61,37 +62,37 @@ func TestInsertCustomRoles(t *testing.T) {
6162return all
6263}
6364
64- orgID := uuid.NullUUID {
65- UUID :uuid .New (),
66- Valid :true ,
67- }
65+ orgID := uuid .New ()
66+
6867testCases := []struct {
6968name string
7069
7170subject rbac.ExpandableRoles
7271
7372// Perms to create on new custom role
74- organizationID uuid.NullUUID
73+ organizationID uuid.UUID
7574site []codersdk.Permission
7675org []codersdk.Permission
7776user []codersdk.Permission
7877errorContains string
7978}{
8079{
8180// No roles, so no assign role
82- name :"no-roles" ,
83- subject : rbac.RoleIdentifiers {},
84- errorContains :"forbidden" ,
81+ name :"no-roles" ,
82+ organizationID :orgID ,
83+ subject : rbac.RoleIdentifiers {},
84+ errorContains :"forbidden" ,
8585},
8686{
8787// This works because the new role has 0 perms
88- name :"empty" ,
89- subject :merge (canAssignRole ),
88+ name :"empty" ,
89+ organizationID :orgID ,
90+ subject :merge (canCreateCustomRole ),
9091},
9192{
9293name :"mixed-scopes" ,
93- subject :merge (canAssignRole ,rbac .RoleOwner ()),
9494organizationID :orgID ,
95+ subject :merge (canCreateCustomRole ,rbac .RoleOwner ()),
9596site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
9697codersdk .ResourceWorkspace : {codersdk .ActionRead },
9798}),
@@ -101,27 +102,30 @@ func TestInsertCustomRoles(t *testing.T) {
101102errorContains :"organization roles specify site or user permissions" ,
102103},
103104{
104- name :"invalid-action" ,
105- subject :merge (canAssignRole ,rbac .RoleOwner ()),
106- site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
105+ name :"invalid-action" ,
106+ organizationID :orgID ,
107+ subject :merge (canCreateCustomRole ,rbac .RoleOwner ()),
108+ org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
107109// Action does not go with resource
108110codersdk .ResourceWorkspace : {codersdk .ActionViewInsights },
109111}),
110112errorContains :"invalid action" ,
111113},
112114{
113- name :"invalid-resource" ,
114- subject :merge (canAssignRole ,rbac .RoleOwner ()),
115- site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
115+ name :"invalid-resource" ,
116+ organizationID :orgID ,
117+ subject :merge (canCreateCustomRole ,rbac .RoleOwner ()),
118+ org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
116119"foobar" : {codersdk .ActionViewInsights },
117120}),
118121errorContains :"invalid resource" ,
119122},
120123{
121124// Not allowing these at this time.
122- name :"negative-permission" ,
123- subject :merge (canAssignRole ,rbac .RoleOwner ()),
124- site : []codersdk.Permission {
125+ name :"negative-permission" ,
126+ organizationID :orgID ,
127+ subject :merge (canCreateCustomRole ,rbac .RoleOwner ()),
128+ org : []codersdk.Permission {
125129{
126130Negate :true ,
127131ResourceType :codersdk .ResourceWorkspace ,
@@ -131,89 +135,69 @@ func TestInsertCustomRoles(t *testing.T) {
131135errorContains :"no negative permissions" ,
132136},
133137{
134- name :"wildcard" ,// not allowed
135- subject :merge (canAssignRole ,rbac .RoleOwner ()),
136- site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
138+ name :"wildcard" ,// not allowed
139+ organizationID :orgID ,
140+ subject :merge (canCreateCustomRole ,rbac .RoleOwner ()),
141+ org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
137142codersdk .ResourceWorkspace : {"*" },
138143}),
139144errorContains :"no wildcard symbols" ,
140145},
141146// escalation checks
142147{
143- name :"read-workspace-escalation" ,
144- subject :merge (canAssignRole ),
145- site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
148+ name :"read-workspace-escalation" ,
149+ organizationID :orgID ,
150+ subject :merge (canCreateCustomRole ),
151+ org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
146152codersdk .ResourceWorkspace : {codersdk .ActionRead },
147153}),
148154errorContains :"not allowed to grant this permission" ,
149155},
150156{
151- name :"read-workspace-outside-org" ,
152- organizationID : uuid.NullUUID {
153- UUID :uuid .New (),
154- Valid :true ,
155- },
156- subject :merge (canAssignRole ,rbac .ScopedRoleOrgAdmin (orgID .UUID )),
157+ name :"read-workspace-outside-org" ,
158+ organizationID :uuid .New (),
159+ subject :merge (canCreateCustomRole ,rbac .ScopedRoleOrgAdmin (orgID )),
157160org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
158161codersdk .ResourceWorkspace : {codersdk .ActionRead },
159162}),
160- errorContains :"forbidden " ,
163+ errorContains :"not allowed to grant this permission " ,
161164},
162165{
163166name :"user-escalation" ,
164167// These roles do not grant user perms
165- subject :merge (canAssignRole ,rbac .ScopedRoleOrgAdmin (orgID .UUID )),
168+ organizationID :orgID ,
169+ subject :merge (canCreateCustomRole ,rbac .ScopedRoleOrgAdmin (orgID )),
166170user :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
167171codersdk .ResourceWorkspace : {codersdk .ActionRead },
168172}),
169- errorContains :"not allowed to grant this permission " ,
173+ errorContains :"organization roles specify site or user permissions " ,
170174},
171175{
172- name :"template-admin-escalation" ,
173- subject :merge (canAssignRole ,rbac .RoleTemplateAdmin ()),
176+ name :"site-escalation" ,
177+ organizationID :orgID ,
178+ subject :merge (canCreateCustomRole ,rbac .RoleTemplateAdmin ()),
174179site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
175- codersdk .ResourceWorkspace : {codersdk .ActionRead },// ok!
176180codersdk .ResourceDeploymentConfig : {codersdk .ActionUpdate },// not ok!
177181}),
178- user :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
179- codersdk .ResourceWorkspace : {codersdk .ActionRead },// ok!
180- }),
181- errorContains :"deployment_config" ,
182+ errorContains :"organization roles specify site or user permissions" ,
182183},
183184// ok!
184185{
185- name :"read-workspace-template-admin" ,
186- subject :merge (canAssignRole ,rbac .RoleTemplateAdmin ()),
187- site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
186+ name :"read-workspace-template-admin" ,
187+ organizationID :orgID ,
188+ subject :merge (canCreateCustomRole ,rbac .RoleTemplateAdmin ()),
189+ org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
188190codersdk .ResourceWorkspace : {codersdk .ActionRead },
189191}),
190192},
191193{
192194name :"read-workspace-in-org" ,
193- subject :merge (canAssignRole ,rbac .ScopedRoleOrgAdmin (orgID .UUID )),
194195organizationID :orgID ,
196+ subject :merge (canCreateCustomRole ,rbac .ScopedRoleOrgAdmin (orgID )),
195197org :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
196198codersdk .ResourceWorkspace : {codersdk .ActionRead },
197199}),
198200},
199- {
200- name :"user-perms" ,
201- // This is weird, but is ok
202- subject :merge (canAssignRole ,rbac .RoleMember ()),
203- user :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
204- codersdk .ResourceWorkspace : {codersdk .ActionRead },
205- }),
206- },
207- {
208- name :"site+user-perms" ,
209- subject :merge (canAssignRole ,rbac .RoleMember (),rbac .RoleTemplateAdmin ()),
210- site :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
211- codersdk .ResourceWorkspace : {codersdk .ActionRead },
212- }),
213- user :codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
214- codersdk .ResourceWorkspace : {codersdk .ActionRead },
215- }),
216- },
217201}
218202
219203for _ ,tc := range testCases {
@@ -234,7 +218,7 @@ func TestInsertCustomRoles(t *testing.T) {
234218_ ,err := az .InsertCustomRole (ctx , database.InsertCustomRoleParams {
235219Name :"test-role" ,
236220DisplayName :"" ,
237- OrganizationID :tc .organizationID ,
221+ OrganizationID :uuid. NullUUID { UUID : tc .organizationID , Valid : true } ,
238222SitePermissions :db2sdk .List (tc .site ,convertSDKPerm ),
239223OrgPermissions :db2sdk .List (tc .org ,convertSDKPerm ),
240224UserPermissions :db2sdk .List (tc .user ,convertSDKPerm ),
@@ -249,11 +233,11 @@ func TestInsertCustomRoles(t *testing.T) {
249233LookupRoles : []database.NameOrganizationPair {
250234{
251235Name :"test-role" ,
252- OrganizationID :tc .organizationID . UUID ,
236+ OrganizationID :tc .organizationID ,
253237},
254238},
255239ExcludeOrgRoles :false ,
256- OrganizationID : uuid.UUID {} ,
240+ OrganizationID :uuid .Nil ,
257241})
258242require .NoError (t ,err )
259243require .Len (t ,roles ,1 )