@@ -111,6 +111,7 @@ func TestRolePermissions(t *testing.T) {
111
111
// currentUser is anything that references "me", "mine", or "my".
112
112
currentUser := uuid .New ()
113
113
adminID := uuid .New ()
114
+ templateAdminID := uuid .New ()
114
115
orgID := uuid .New ()
115
116
otherOrg := uuid .New ()
116
117
@@ -124,9 +125,12 @@ func TestRolePermissions(t *testing.T) {
124
125
otherOrgMember := authSubject {Name : "org_member_other" , UserID : uuid .NewString (), Roles : []string {rbac .RoleMember (), rbac .RoleOrgMember (otherOrg )}}
125
126
otherOrgAdmin := authSubject {Name : "org_admin_other" , UserID : uuid .NewString (), Roles : []string {rbac .RoleMember (), rbac .RoleOrgMember (otherOrg ), rbac .RoleOrgAdmin (otherOrg )}}
126
127
128
+ templateAdmin := authSubject {Name : "template-admin" , UserID : templateAdminID .String (), Roles : []string {rbac .RoleMember (), rbac .RoleTemplateAdmin ()}}
129
+ userAdmin := authSubject {Name : "user-admin" , UserID : templateAdminID .String (), Roles : []string {rbac .RoleMember (), rbac .RoleUserAdmin ()}}
130
+
127
131
// requiredSubjects are required to be asserted in each test case. This is
128
132
// to make sure one is not forgotten.
129
- requiredSubjects := []authSubject {memberMe , admin , orgMemberMe , orgAdmin , otherOrgAdmin , otherOrgMember }
133
+ requiredSubjects := []authSubject {memberMe , admin , orgMemberMe , orgAdmin , otherOrgAdmin , otherOrgMember , templateAdmin , userAdmin }
130
134
131
135
testCases := []struct {
132
136
// Name the test case to better locate the failing test case.
@@ -146,7 +150,7 @@ func TestRolePermissions(t *testing.T) {
146
150
Actions : []rbac.Action {rbac .ActionRead },
147
151
Resource : rbac .ResourceUser ,
148
152
AuthorizeMap : map [bool ][]authSubject {
149
- true : {admin , memberMe , orgMemberMe , orgAdmin , otherOrgMember , otherOrgAdmin },
153
+ true : {admin , memberMe , orgMemberMe , orgAdmin , otherOrgMember , otherOrgAdmin , templateAdmin , userAdmin },
150
154
false : {},
151
155
},
152
156
},
@@ -155,8 +159,8 @@ func TestRolePermissions(t *testing.T) {
155
159
Actions : []rbac.Action {rbac .ActionCreate , rbac .ActionUpdate , rbac .ActionDelete },
156
160
Resource : rbac .ResourceUser ,
157
161
AuthorizeMap : map [bool ][]authSubject {
158
- true : {admin },
159
- false : {memberMe , orgMemberMe , orgAdmin , otherOrgMember , otherOrgAdmin },
162
+ true : {admin , userAdmin },
163
+ false : {memberMe , orgMemberMe , orgAdmin , otherOrgMember , otherOrgAdmin , templateAdmin },
160
164
},
161
165
},
162
166
{
@@ -165,44 +169,54 @@ func TestRolePermissions(t *testing.T) {
165
169
Actions : []rbac.Action {rbac .ActionCreate , rbac .ActionRead , rbac .ActionUpdate , rbac .ActionDelete },
166
170
Resource : rbac .ResourceWorkspace .InOrg (orgID ).WithOwner (currentUser .String ()),
167
171
AuthorizeMap : map [bool ][]authSubject {
168
- true : {admin , orgMemberMe , orgAdmin },
169
- false : {memberMe , otherOrgAdmin , otherOrgMember },
172
+ true : {admin , orgMemberMe , orgAdmin , templateAdmin },
173
+ false : {memberMe , otherOrgAdmin , otherOrgMember , userAdmin },
174
+ },
175
+ },
176
+ {
177
+ Name : "MyWorkspaceInOrgExecution" ,
178
+ // When creating the WithID won't be set, but it does not change the result.
179
+ Actions : []rbac.Action {rbac .ActionCreate , rbac .ActionRead , rbac .ActionUpdate , rbac .ActionDelete },
180
+ Resource : rbac .ResourceWorkspaceExecution .InOrg (orgID ).WithOwner (currentUser .String ()),
181
+ AuthorizeMap : map [bool ][]authSubject {
182
+ true : {admin , orgAdmin , orgMemberMe },
183
+ false : {memberMe , otherOrgAdmin , otherOrgMember , templateAdmin , userAdmin },
170
184
},
171
185
},
172
186
{
173
187
Name : "Templates" ,
174
188
Actions : []rbac.Action {rbac .ActionCreate , rbac .ActionUpdate , rbac .ActionDelete },
175
189
Resource : rbac .ResourceTemplate .InOrg (orgID ),
176
190
AuthorizeMap : map [bool ][]authSubject {
177
- true : {admin , orgAdmin },
178
- false : {memberMe , orgMemberMe , otherOrgAdmin , otherOrgMember },
191
+ true : {admin , orgAdmin , templateAdmin },
192
+ false : {memberMe , orgMemberMe , otherOrgAdmin , otherOrgMember , userAdmin },
179
193
},
180
194
},
181
195
{
182
196
Name : "ReadTemplates" ,
183
197
Actions : []rbac.Action {rbac .ActionRead },
184
198
Resource : rbac .ResourceTemplate .InOrg (orgID ),
185
199
AuthorizeMap : map [bool ][]authSubject {
186
- true : {admin , orgMemberMe , orgAdmin },
187
- false : {memberMe , otherOrgAdmin , otherOrgMember },
200
+ true : {admin , orgMemberMe , orgAdmin , templateAdmin },
201
+ false : {memberMe , otherOrgAdmin , otherOrgMember , userAdmin },
188
202
},
189
203
},
190
204
{
191
205
Name : "Files" ,
192
206
Actions : []rbac.Action {rbac .ActionCreate },
193
207
Resource : rbac .ResourceFile ,
194
208
AuthorizeMap : map [bool ][]authSubject {
195
- true : {admin },
196
- false : {orgMemberMe , orgAdmin , memberMe , otherOrgAdmin , otherOrgMember },
209
+ true : {admin , templateAdmin },
210
+ false : {orgMemberMe , orgAdmin , memberMe , otherOrgAdmin , otherOrgMember , userAdmin },
197
211
},
198
212
},
199
213
{
200
214
Name : "MyFile" ,
201
215
Actions : []rbac.Action {rbac .ActionRead , rbac .ActionUpdate , rbac .ActionDelete },
202
216
Resource : rbac .ResourceFile .WithOwner (currentUser .String ()),
203
217
AuthorizeMap : map [bool ][]authSubject {
204
- true : {admin , memberMe , orgMemberMe },
205
- false : {orgAdmin , otherOrgAdmin , otherOrgMember },
218
+ true : {admin , memberMe , orgMemberMe , templateAdmin },
219
+ false : {orgAdmin , otherOrgAdmin , otherOrgMember , userAdmin },
206
220
},
207
221
},
208
222
{
@@ -211,7 +225,7 @@ func TestRolePermissions(t *testing.T) {
211
225
Resource : rbac .ResourceOrganization ,
212
226
AuthorizeMap : map [bool ][]authSubject {
213
227
true : {admin },
214
- false : {orgAdmin , otherOrgAdmin , otherOrgMember , memberMe , orgMemberMe },
228
+ false : {orgAdmin , otherOrgAdmin , otherOrgMember , memberMe , orgMemberMe , templateAdmin , userAdmin },
215
229
},
216
230
},
217
231
{
@@ -220,7 +234,7 @@ func TestRolePermissions(t *testing.T) {
220
234
Resource : rbac .ResourceOrganization .InOrg (orgID ),
221
235
AuthorizeMap : map [bool ][]authSubject {
222
236
true : {admin , orgAdmin },
223
- false : {otherOrgAdmin , otherOrgMember , memberMe , orgMemberMe },
237
+ false : {otherOrgAdmin , otherOrgMember , memberMe , orgMemberMe , templateAdmin , userAdmin },
224
238
},
225
239
},
226
240
{
@@ -229,7 +243,7 @@ func TestRolePermissions(t *testing.T) {
229
243
Resource : rbac .ResourceOrganization .InOrg (orgID ),
230
244
AuthorizeMap : map [bool ][]authSubject {
231
245
true : {admin , orgAdmin , orgMemberMe },
232
- false : {otherOrgAdmin , otherOrgMember , memberMe },
246
+ false : {otherOrgAdmin , otherOrgMember , memberMe , templateAdmin , userAdmin },
233
247
},
234
248
},
235
249
{
@@ -238,15 +252,15 @@ func TestRolePermissions(t *testing.T) {
238
252
Resource : rbac .ResourceRoleAssignment ,
239
253
AuthorizeMap : map [bool ][]authSubject {
240
254
true : {admin },
241
- false : {orgAdmin , orgMemberMe , otherOrgAdmin , otherOrgMember , memberMe },
255
+ false : {orgAdmin , orgMemberMe , otherOrgAdmin , otherOrgMember , memberMe , templateAdmin , userAdmin },
242
256
},
243
257
},
244
258
{
245
259
Name : "ReadRoleAssignment" ,
246
260
Actions : []rbac.Action {rbac .ActionRead },
247
261
Resource : rbac .ResourceRoleAssignment ,
248
262
AuthorizeMap : map [bool ][]authSubject {
249
- true : {admin , orgAdmin , orgMemberMe , otherOrgAdmin , otherOrgMember , memberMe },
263
+ true : {admin , orgAdmin , orgMemberMe , otherOrgAdmin , otherOrgMember , memberMe , templateAdmin , userAdmin },
250
264
false : {},
251
265
},
252
266
},
@@ -256,7 +270,7 @@ func TestRolePermissions(t *testing.T) {
256
270
Resource : rbac .ResourceOrgRoleAssignment .InOrg (orgID ),
257
271
AuthorizeMap : map [bool ][]authSubject {
258
272
true : {admin , orgAdmin },
259
- false : {orgMemberMe , otherOrgAdmin , otherOrgMember , memberMe },
273
+ false : {orgMemberMe , otherOrgAdmin , otherOrgMember , memberMe , templateAdmin , userAdmin },
260
274
},
261
275
},
262
276
{
@@ -265,7 +279,7 @@ func TestRolePermissions(t *testing.T) {
265
279
Resource : rbac .ResourceOrgRoleAssignment .InOrg (orgID ),
266
280
AuthorizeMap : map [bool ][]authSubject {
267
281
true : {admin , orgAdmin , orgMemberMe },
268
- false : {otherOrgAdmin , otherOrgMember , memberMe },
282
+ false : {otherOrgAdmin , otherOrgMember , memberMe , templateAdmin , userAdmin },
269
283
},
270
284
},
271
285
{
@@ -274,7 +288,7 @@ func TestRolePermissions(t *testing.T) {
274
288
Resource : rbac .ResourceAPIKey .WithOwner (currentUser .String ()),
275
289
AuthorizeMap : map [bool ][]authSubject {
276
290
true : {admin , orgMemberMe , memberMe },
277
- false : {orgAdmin , otherOrgAdmin , otherOrgMember },
291
+ false : {orgAdmin , otherOrgAdmin , otherOrgMember , templateAdmin , userAdmin },
278
292
},
279
293
},
280
294
{
@@ -283,7 +297,7 @@ func TestRolePermissions(t *testing.T) {
283
297
Resource : rbac .ResourceUserData .WithOwner (currentUser .String ()),
284
298
AuthorizeMap : map [bool ][]authSubject {
285
299
true : {admin , orgMemberMe , memberMe },
286
- false : {orgAdmin , otherOrgAdmin , otherOrgMember },
300
+ false : {orgAdmin , otherOrgAdmin , otherOrgMember , templateAdmin , userAdmin },
287
301
},
288
302
},
289
303
{
@@ -292,7 +306,7 @@ func TestRolePermissions(t *testing.T) {
292
306
Resource : rbac .ResourceOrganizationMember .InOrg (orgID ),
293
307
AuthorizeMap : map [bool ][]authSubject {
294
308
true : {admin , orgAdmin },
295
- false : {orgMemberMe , memberMe , otherOrgAdmin , otherOrgMember },
309
+ false : {orgMemberMe , memberMe , otherOrgAdmin , otherOrgMember , templateAdmin , userAdmin },
296
310
},
297
311
},
298
312
{
@@ -301,7 +315,7 @@ func TestRolePermissions(t *testing.T) {
301
315
Resource : rbac .ResourceOrganizationMember .InOrg (orgID ),
302
316
AuthorizeMap : map [bool ][]authSubject {
303
317
true : {admin , orgAdmin , orgMemberMe },
304
- false : {memberMe , otherOrgAdmin , otherOrgMember },
318
+ false : {memberMe , otherOrgAdmin , otherOrgMember , templateAdmin , userAdmin },
305
319
},
306
320
},
307
321
}
@@ -396,10 +410,14 @@ func TestListRoles(t *testing.T) {
396
410
397
411
// If this test is ever failing, just update the list to the roles
398
412
// expected from the builtin set.
413
+ // Always use constant strings, as if the names change, we need to write
414
+ // a SQL migration to change the name on the backend.
399
415
require .ElementsMatch (t , []string {
400
416
"admin" ,
401
417
"member" ,
402
418
"auditor" ,
419
+ "template-admin" ,
420
+ "user-admin" ,
403
421
},
404
422
siteRoleNames )
405
423
0 commit comments