@@ -34,11 +34,11 @@ func TestInsertCustomRoles(t *testing.T) {
34
34
}
35
35
}
36
36
37
- canAssignRole := rbac.Role {
37
+ canCreateCustomRole := rbac.Role {
38
38
Identifier : rbac.RoleIdentifier {Name : "can-assign" },
39
39
DisplayName : "" ,
40
40
Site : rbac .Permissions (map [string ][]policy.Action {
41
- rbac .ResourceAssignRole .Type : {policy .ActionRead , policy .ActionCreate },
41
+ rbac .ResourceAssignOrgRole .Type : {policy .ActionRead , policy .ActionCreate },
42
42
}),
43
43
}
44
44
@@ -61,37 +61,37 @@ func TestInsertCustomRoles(t *testing.T) {
61
61
return all
62
62
}
63
63
64
- orgID := uuid.NullUUID {
65
- UUID : uuid .New (),
66
- Valid : true ,
67
- }
64
+ orgID := uuid .New ()
65
+
68
66
testCases := []struct {
69
67
name string
70
68
71
69
subject rbac.ExpandableRoles
72
70
73
71
// Perms to create on new custom role
74
- organizationID uuid.NullUUID
72
+ organizationID uuid.UUID
75
73
site []codersdk.Permission
76
74
org []codersdk.Permission
77
75
user []codersdk.Permission
78
76
errorContains string
79
77
}{
80
78
{
81
79
// No roles, so no assign role
82
- name : "no-roles" ,
83
- subject : rbac.RoleIdentifiers {},
84
- errorContains : "forbidden" ,
80
+ name : "no-roles" ,
81
+ organizationID : orgID ,
82
+ subject : rbac.RoleIdentifiers {},
83
+ errorContains : "forbidden" ,
85
84
},
86
85
{
87
86
// This works because the new role has 0 perms
88
- name : "empty" ,
89
- subject : merge (canAssignRole ),
87
+ name : "empty" ,
88
+ organizationID : orgID ,
89
+ subject : merge (canCreateCustomRole ),
90
90
},
91
91
{
92
92
name : "mixed-scopes" ,
93
- subject : merge (canAssignRole , rbac .RoleOwner ()),
94
93
organizationID : orgID ,
94
+ subject : merge (canCreateCustomRole , rbac .RoleOwner ()),
95
95
site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
96
96
codersdk .ResourceWorkspace : {codersdk .ActionRead },
97
97
}),
@@ -101,27 +101,30 @@ func TestInsertCustomRoles(t *testing.T) {
101
101
errorContains : "organization roles specify site or user permissions" ,
102
102
},
103
103
{
104
- name : "invalid-action" ,
105
- subject : merge (canAssignRole , rbac .RoleOwner ()),
106
- site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
104
+ name : "invalid-action" ,
105
+ organizationID : orgID ,
106
+ subject : merge (canCreateCustomRole , rbac .RoleOwner ()),
107
+ org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
107
108
// Action does not go with resource
108
109
codersdk .ResourceWorkspace : {codersdk .ActionViewInsights },
109
110
}),
110
111
errorContains : "invalid action" ,
111
112
},
112
113
{
113
- name : "invalid-resource" ,
114
- subject : merge (canAssignRole , rbac .RoleOwner ()),
115
- site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
114
+ name : "invalid-resource" ,
115
+ organizationID : orgID ,
116
+ subject : merge (canCreateCustomRole , rbac .RoleOwner ()),
117
+ org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
116
118
"foobar" : {codersdk .ActionViewInsights },
117
119
}),
118
120
errorContains : "invalid resource" ,
119
121
},
120
122
{
121
123
// Not allowing these at this time.
122
- name : "negative-permission" ,
123
- subject : merge (canAssignRole , rbac .RoleOwner ()),
124
- site : []codersdk.Permission {
124
+ name : "negative-permission" ,
125
+ organizationID : orgID ,
126
+ subject : merge (canCreateCustomRole , rbac .RoleOwner ()),
127
+ org : []codersdk.Permission {
125
128
{
126
129
Negate : true ,
127
130
ResourceType : codersdk .ResourceWorkspace ,
@@ -131,89 +134,69 @@ func TestInsertCustomRoles(t *testing.T) {
131
134
errorContains : "no negative permissions" ,
132
135
},
133
136
{
134
- name : "wildcard" , // not allowed
135
- subject : merge (canAssignRole , rbac .RoleOwner ()),
136
- site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
137
+ name : "wildcard" , // not allowed
138
+ organizationID : orgID ,
139
+ subject : merge (canCreateCustomRole , rbac .RoleOwner ()),
140
+ org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
137
141
codersdk .ResourceWorkspace : {"*" },
138
142
}),
139
143
errorContains : "no wildcard symbols" ,
140
144
},
141
145
// escalation checks
142
146
{
143
- name : "read-workspace-escalation" ,
144
- subject : merge (canAssignRole ),
145
- site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
147
+ name : "read-workspace-escalation" ,
148
+ organizationID : orgID ,
149
+ subject : merge (canCreateCustomRole ),
150
+ org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
146
151
codersdk .ResourceWorkspace : {codersdk .ActionRead },
147
152
}),
148
153
errorContains : "not allowed to grant this permission" ,
149
154
},
150
155
{
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 )),
156
+ name : "read-workspace-outside-org" ,
157
+ organizationID : uuid .New (),
158
+ subject : merge (canCreateCustomRole , rbac .ScopedRoleOrgAdmin (orgID )),
157
159
org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
158
160
codersdk .ResourceWorkspace : {codersdk .ActionRead },
159
161
}),
160
- errorContains : "forbidden " ,
162
+ errorContains : "not allowed to grant this permission " ,
161
163
},
162
164
{
163
165
name : "user-escalation" ,
164
166
// These roles do not grant user perms
165
- subject : merge (canAssignRole , rbac .ScopedRoleOrgAdmin (orgID .UUID )),
167
+ organizationID : orgID ,
168
+ subject : merge (canCreateCustomRole , rbac .ScopedRoleOrgAdmin (orgID )),
166
169
user : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
167
170
codersdk .ResourceWorkspace : {codersdk .ActionRead },
168
171
}),
169
- errorContains : "not allowed to grant this permission " ,
172
+ errorContains : "organization roles specify site or user permissions " ,
170
173
},
171
174
{
172
- name : "template-admin-escalation" ,
173
- subject : merge (canAssignRole , rbac .RoleTemplateAdmin ()),
175
+ name : "site-escalation" ,
176
+ organizationID : orgID ,
177
+ subject : merge (canCreateCustomRole , rbac .RoleTemplateAdmin ()),
174
178
site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
175
- codersdk .ResourceWorkspace : {codersdk .ActionRead }, // ok!
176
179
codersdk .ResourceDeploymentConfig : {codersdk .ActionUpdate }, // not ok!
177
180
}),
178
- user : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
179
- codersdk .ResourceWorkspace : {codersdk .ActionRead }, // ok!
180
- }),
181
- errorContains : "deployment_config" ,
181
+ errorContains : "organization roles specify site or user permissions" ,
182
182
},
183
183
// ok!
184
184
{
185
- name : "read-workspace-template-admin" ,
186
- subject : merge (canAssignRole , rbac .RoleTemplateAdmin ()),
187
- site : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
185
+ name : "read-workspace-template-admin" ,
186
+ organizationID : orgID ,
187
+ subject : merge (canCreateCustomRole , rbac .RoleTemplateAdmin ()),
188
+ org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
188
189
codersdk .ResourceWorkspace : {codersdk .ActionRead },
189
190
}),
190
191
},
191
192
{
192
193
name : "read-workspace-in-org" ,
193
- subject : merge (canAssignRole , rbac .ScopedRoleOrgAdmin (orgID .UUID )),
194
194
organizationID : orgID ,
195
+ subject : merge (canCreateCustomRole , rbac .ScopedRoleOrgAdmin (orgID )),
195
196
org : codersdk .CreatePermissions (map [codersdk.RBACResource ][]codersdk.RBACAction {
196
197
codersdk .ResourceWorkspace : {codersdk .ActionRead },
197
198
}),
198
199
},
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
- },
217
200
}
218
201
219
202
for _ , tc := range testCases {
@@ -234,7 +217,7 @@ func TestInsertCustomRoles(t *testing.T) {
234
217
_ , err := az .InsertCustomRole (ctx , database.InsertCustomRoleParams {
235
218
Name : "test-role" ,
236
219
DisplayName : "" ,
237
- OrganizationID : tc .organizationID ,
220
+ OrganizationID : uuid. NullUUID { UUID : tc .organizationID , Valid : true } ,
238
221
SitePermissions : db2sdk .List (tc .site , convertSDKPerm ),
239
222
OrgPermissions : db2sdk .List (tc .org , convertSDKPerm ),
240
223
UserPermissions : db2sdk .List (tc .user , convertSDKPerm ),
@@ -249,11 +232,11 @@ func TestInsertCustomRoles(t *testing.T) {
249
232
LookupRoles : []database.NameOrganizationPair {
250
233
{
251
234
Name : "test-role" ,
252
- OrganizationID : tc .organizationID . UUID ,
235
+ OrganizationID : tc .organizationID ,
253
236
},
254
237
},
255
238
ExcludeOrgRoles : false ,
256
- OrganizationID : uuid.UUID {} ,
239
+ OrganizationID : uuid .Nil ,
257
240
})
258
241
require .NoError (t , err )
259
242
require .Len (t , roles , 1 )
0 commit comments