@@ -193,6 +193,53 @@ func TestCreateWorkspace(t *testing.T) {
193
193
require .Equal (t , http .StatusBadRequest , apiErr .StatusCode ())
194
194
require .Contains (t , apiErr .Message , "doesn't exist" )
195
195
})
196
+
197
+ // Auditors cannot "use" templates, they can only read them.
198
+ t .Run ("Auditor" , func (t * testing.T ) {
199
+ t .Parallel ()
200
+
201
+ owner , first := coderdenttest .New (t , & coderdenttest.Options {
202
+ Options : & coderdtest.Options {
203
+ IncludeProvisionerDaemon : true ,
204
+ },
205
+ LicenseOptions : & coderdenttest.LicenseOptions {
206
+ Features : license.Features {
207
+ codersdk .FeatureTemplateRBAC : 1 ,
208
+ codersdk .FeatureMultipleOrganizations : 1 ,
209
+ },
210
+ },
211
+ })
212
+
213
+ // A member of the org as an auditor
214
+ auditor , _ := coderdtest .CreateAnotherUser (t , owner , first .OrganizationID , rbac .RoleAuditor ())
215
+
216
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
217
+ defer cancel ()
218
+
219
+ // Given: a template with a version without the "use" permission on everyone
220
+ version := coderdtest .CreateTemplateVersion (t , owner , first .OrganizationID , nil )
221
+ _ = coderdtest .AwaitTemplateVersionJobCompleted (t , owner , version .ID )
222
+ template := coderdtest .CreateTemplate (t , owner , first .OrganizationID , version .ID )
223
+
224
+ //nolint:gocritic // This should be run as the owner user.
225
+ err := owner .UpdateTemplateACL (ctx , template .ID , codersdk.UpdateTemplateACL {
226
+ UserPerms : nil ,
227
+ GroupPerms : map [string ]codersdk.TemplateRole {
228
+ first .OrganizationID .String (): codersdk .TemplateRoleDeleted ,
229
+ },
230
+ })
231
+ require .NoError (t , err )
232
+
233
+ _ , err = auditor .CreateUserWorkspace (ctx , codersdk .Me , codersdk.CreateWorkspaceRequest {
234
+ TemplateID : template .ID ,
235
+ Name : "workspace" ,
236
+ })
237
+ require .Error (t , err )
238
+ var apiErr * codersdk.Error
239
+ require .ErrorAs (t , err , & apiErr )
240
+ require .Equal (t , http .StatusForbidden , apiErr .StatusCode ())
241
+ require .Contains (t , apiErr .Message , "Unauthorized access to use the template" )
242
+ })
196
243
}
197
244
198
245
func TestCreateUserWorkspace (t * testing.T ) {
0 commit comments