@@ -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 ) {
0 commit comments