@@ -1167,25 +1167,12 @@ func (q *querier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesP
11671167return q .db .GetAuthorizedWorkspaces (ctx ,arg ,prep )
11681168}
11691169
1170- func (q * querier )GetLatestWorkspaceBuildByWorkspaceID (ctx context.Context ,workspaceID uuid.UUID ) (database.WorkspaceBuild ,error ) {
1171- if _ ,err := q .GetWorkspaceByID (ctx ,workspaceID );err != nil {
1172- return database.WorkspaceBuild {},err
1173- }
1174- return q .db .GetLatestWorkspaceBuildByWorkspaceID (ctx ,workspaceID )
1170+ func (q * querier )GetLatestWorkspaceBuildByWorkspaceID (ctx context.Context ,workspaceID uuid.UUID ) (database.WorkspaceBuildRBAC ,error ) {
1171+ return fetch (q .log ,q .auth ,q .db .GetLatestWorkspaceBuildByWorkspaceID )(ctx ,workspaceID )
11751172}
11761173
1177- func (q * querier )GetLatestWorkspaceBuildsByWorkspaceIDs (ctx context.Context ,ids []uuid.UUID ) ([]database.WorkspaceBuild ,error ) {
1178- // This is not ideal as not all builds will be returned if the workspace cannot be read.
1179- // This should probably be handled differently? Maybe join workspace builds with workspace
1180- // ownership properties and filter on that.
1181- for _ ,id := range ids {
1182- _ ,err := q .GetWorkspaceByID (ctx ,id )
1183- if err != nil {
1184- return nil ,err
1185- }
1186- }
1187-
1188- return q .db .GetLatestWorkspaceBuildsByWorkspaceIDs (ctx ,ids )
1174+ func (q * querier )GetLatestWorkspaceBuildsByWorkspaceIDs (ctx context.Context ,ids []uuid.UUID ) ([]database.WorkspaceBuildRBAC ,error ) {
1175+ return fetchWithPostFilter (q .auth ,q .db .GetLatestWorkspaceBuildsByWorkspaceIDs )(ctx ,ids )
11891176}
11901177
11911178func (q * querier )GetWorkspaceAgentByID (ctx context.Context ,id uuid.UUID ) (database.WorkspaceAgent ,error ) {
@@ -1263,35 +1250,16 @@ func (q *querier) GetWorkspaceAppsByAgentID(ctx context.Context, agentID uuid.UU
12631250return q .db .GetWorkspaceAppsByAgentID (ctx ,agentID )
12641251}
12651252
1266- func (q * querier )GetWorkspaceBuildByID (ctx context.Context ,buildID uuid.UUID ) (database.WorkspaceBuild ,error ) {
1267- build ,err := q .db .GetWorkspaceBuildByID (ctx ,buildID )
1268- if err != nil {
1269- return database.WorkspaceBuild {},err
1270- }
1271- if _ ,err := q .GetWorkspaceByID (ctx ,build .WorkspaceID );err != nil {
1272- return database.WorkspaceBuild {},err
1273- }
1274- return build ,nil
1253+ func (q * querier )GetWorkspaceBuildByID (ctx context.Context ,buildID uuid.UUID ) (database.WorkspaceBuildRBAC ,error ) {
1254+ return fetch (q .log ,q .auth ,q .db .GetWorkspaceBuildByID )(ctx ,buildID )
12751255}
12761256
1277- func (q * querier )GetWorkspaceBuildByJobID (ctx context.Context ,jobID uuid.UUID ) (database.WorkspaceBuild ,error ) {
1278- build ,err := q .db .GetWorkspaceBuildByJobID (ctx ,jobID )
1279- if err != nil {
1280- return database.WorkspaceBuild {},err
1281- }
1282- // Authorized fetch
1283- _ ,err = q .GetWorkspaceByID (ctx ,build .WorkspaceID )
1284- if err != nil {
1285- return database.WorkspaceBuild {},err
1286- }
1287- return build ,nil
1257+ func (q * querier )GetWorkspaceBuildByJobID (ctx context.Context ,jobID uuid.UUID ) (database.WorkspaceBuildRBAC ,error ) {
1258+ return fetch (q .log ,q .auth ,q .db .GetWorkspaceBuildByJobID )(ctx ,jobID )
12881259}
12891260
1290- func (q * querier )GetWorkspaceBuildByWorkspaceIDAndBuildNumber (ctx context.Context ,arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams ) (database.WorkspaceBuild ,error ) {
1291- if _ ,err := q .GetWorkspaceByID (ctx ,arg .WorkspaceID );err != nil {
1292- return database.WorkspaceBuild {},err
1293- }
1294- return q .db .GetWorkspaceBuildByWorkspaceIDAndBuildNumber (ctx ,arg )
1261+ func (q * querier )GetWorkspaceBuildByWorkspaceIDAndBuildNumber (ctx context.Context ,arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams ) (database.WorkspaceBuildRBAC ,error ) {
1262+ return fetch (q .log ,q .auth ,q .db .GetWorkspaceBuildByWorkspaceIDAndBuildNumber )(ctx ,arg )
12951263}
12961264
12971265func (q * querier )GetWorkspaceBuildParameters (ctx context.Context ,workspaceBuildID uuid.UUID ) ([]database.WorkspaceBuildParameter ,error ) {
@@ -1305,11 +1273,20 @@ func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuil
13051273return q .db .GetWorkspaceBuildParameters (ctx ,workspaceBuildID )
13061274}
13071275
1308- func (q * querier )GetWorkspaceBuildsByWorkspaceID (ctx context.Context ,arg database.GetWorkspaceBuildsByWorkspaceIDParams ) ([]database.WorkspaceBuild ,error ) {
1309- if _ ,err := q .GetWorkspaceByID (ctx ,arg .WorkspaceID );err != nil {
1276+ func (q * querier )GetWorkspaceBuildsByWorkspaceID (ctx context.Context ,arg database.GetWorkspaceBuildsByWorkspaceIDParams ) ([]database.WorkspaceBuildRBAC ,error ) {
1277+ builds ,err := q .db .GetWorkspaceBuildsByWorkspaceID (ctx ,arg )
1278+ if err != nil {
1279+ return nil ,err
1280+ }
1281+ if len (builds )== 0 {
1282+ return []database.WorkspaceBuildRBAC {},nil
1283+ }
1284+ // All builds come from the same workspace, so we only need to check the first one.
1285+ err = q .authorizeContext (ctx ,rbac .ActionRead ,builds [0 ])
1286+ if err != nil {
13101287return nil ,err
13111288}
1312- return q . db . GetWorkspaceBuildsByWorkspaceID ( ctx , arg )
1289+ return builds , nil
13131290}
13141291
13151292func (q * querier )GetWorkspaceByAgentID (ctx context.Context ,agentID uuid.UUID ) (database.Workspace ,error ) {
@@ -1369,11 +1346,7 @@ func (q *querier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.U
13691346if err != nil {
13701347return nil ,err
13711348}
1372- workspace ,err := q .db .GetWorkspaceByID (ctx ,build .WorkspaceID )
1373- if err != nil {
1374- return nil ,err
1375- }
1376- obj = workspace
1349+ obj = build
13771350default :
13781351return nil ,xerrors .Errorf ("unknown job type: %s" ,job .Type )
13791352}
@@ -1414,12 +1387,7 @@ func (q *querier) InsertWorkspaceBuildParameters(ctx context.Context, arg databa
14141387return err
14151388}
14161389
1417- workspace ,err := q .db .GetWorkspaceByID (ctx ,build .WorkspaceID )
1418- if err != nil {
1419- return err
1420- }
1421-
1422- err = q .authorizeContext (ctx ,rbac .ActionUpdate ,workspace )
1390+ err = q .authorizeContext (ctx ,rbac .ActionUpdate ,build )
14231391if err != nil {
14241392return err
14251393}
@@ -1483,11 +1451,7 @@ func (q *querier) UpdateWorkspaceBuildByID(ctx context.Context, arg database.Upd
14831451return database.WorkspaceBuild {},err
14841452}
14851453
1486- workspace ,err := q .db .GetWorkspaceByID (ctx ,build .WorkspaceID )
1487- if err != nil {
1488- return database.WorkspaceBuild {},err
1489- }
1490- err = q .authorizeContext (ctx ,rbac .ActionUpdate ,workspace .RBACObject ())
1454+ err = q .authorizeContext (ctx ,rbac .ActionUpdate ,build )
14911455if err != nil {
14921456return database.WorkspaceBuild {},err
14931457}