@@ -1182,6 +1182,27 @@ func (q *querier) customRoleCheck(ctx context.Context, role database.CustomRole)
1182
1182
return nil
1183
1183
}
1184
1184
1185
+ func (q * querier )authorizeProvisionerJob (ctx context.Context ,job database.ProvisionerJob )error {
1186
+ switch job .Type {
1187
+ case database .ProvisionerJobTypeWorkspaceBuild :
1188
+ // Authorized call to get workspace build. If we can read the build, we
1189
+ // can read the job.
1190
+ _ ,err := q .GetWorkspaceBuildByJobID (ctx ,job .ID )
1191
+ if err != nil {
1192
+ return xerrors .Errorf ("fetch related workspace build: %w" ,err )
1193
+ }
1194
+ case database .ProvisionerJobTypeTemplateVersionDryRun ,database .ProvisionerJobTypeTemplateVersionImport :
1195
+ // Authorized call to get template version.
1196
+ _ ,err := authorizedTemplateVersionFromJob (ctx ,q ,job )
1197
+ if err != nil {
1198
+ return xerrors .Errorf ("fetch related template version: %w" ,err )
1199
+ }
1200
+ default :
1201
+ return xerrors .Errorf ("unknown job type: %q" ,job .Type )
1202
+ }
1203
+ return nil
1204
+ }
1205
+
1185
1206
func (q * querier )AcquireLock (ctx context.Context ,id int64 )error {
1186
1207
return q .db .AcquireLock (ctx ,id )
1187
1208
}
@@ -2445,32 +2466,24 @@ func (q *querier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (data
2445
2466
return database.ProvisionerJob {},err
2446
2467
}
2447
2468
2448
- switch job .Type {
2449
- case database .ProvisionerJobTypeWorkspaceBuild :
2450
- // Authorized call to get workspace build. If we can read the build, we
2451
- // can read the job.
2452
- _ ,err := q .GetWorkspaceBuildByJobID (ctx ,id )
2453
- if err != nil {
2454
- return database.ProvisionerJob {},xerrors .Errorf ("fetch related workspace build: %w" ,err )
2455
- }
2456
- case database .ProvisionerJobTypeTemplateVersionDryRun ,database .ProvisionerJobTypeTemplateVersionImport :
2457
- // Authorized call to get template version.
2458
- _ ,err := authorizedTemplateVersionFromJob (ctx ,q ,job )
2459
- if err != nil {
2460
- return database.ProvisionerJob {},xerrors .Errorf ("fetch related template version: %w" ,err )
2461
- }
2462
- default :
2463
- return database.ProvisionerJob {},xerrors .Errorf ("unknown job type: %q" ,job .Type )
2469
+ if err := q .authorizeProvisionerJob (ctx ,job );err != nil {
2470
+ return database.ProvisionerJob {},err
2464
2471
}
2465
2472
2466
2473
return job ,nil
2467
2474
}
2468
2475
2469
2476
func (q * querier )GetProvisionerJobByIDForUpdate (ctx context.Context ,id uuid.UUID ) (database.ProvisionerJob ,error ) {
2470
- if err := q .authorizeContext (ctx ,policy .ActionRead ,rbac .ResourceProvisionerJobs );err != nil {
2477
+ job ,err := q .db .GetProvisionerJobByIDForUpdate (ctx ,id )
2478
+ if err != nil {
2471
2479
return database.ProvisionerJob {},err
2472
2480
}
2473
- return q .db .GetProvisionerJobByIDForUpdate (ctx ,id )
2481
+
2482
+ if err := q .authorizeProvisionerJob (ctx ,job );err != nil {
2483
+ return database.ProvisionerJob {},err
2484
+ }
2485
+
2486
+ return job ,nil
2474
2487
}
2475
2488
2476
2489
func (q * querier )GetProvisionerJobTimingsByJobID (ctx context.Context ,jobID uuid.UUID ) ([]database.ProvisionerJobTiming ,error ) {