Skip to content

Commit 72493f1

Browse files
committed
feat #OBS-I584 : Access control changes for dataset read api
1 parent 7dd7bcc commit 72493f1

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

api-service/src/controllers/DatasetRead/DatasetRead.ts

+9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { obsrvError } from "../../types/ObsrvError";
88
import { cipherService } from "../../services/CipherService";
99
import { Dataset } from "../../models/Dataset";
1010
import { Datasource } from "../../models/Datasource";
11+
import { userService } from "../../services/UserService";
1112

1213
export const apiId = "api.datasets.read";
1314
export const errorCode = "DATASET_READ_FAILURE"
@@ -56,6 +57,14 @@ const readDraftDataset = async (datasetId: string, attributes: string[], userID:
5657

5758
const liveDataset = await datasetService.getDataset(datasetId, undefined, true);
5859
if (liveDataset) {
60+
const userCondition = { id: userID };
61+
const userDetails = ["roles", "user_name"];
62+
const user = await userService.getUser(userCondition, userDetails);
63+
const userRoles = _.get(user, "roles");
64+
const hasValidRole = userRoles.some((role: string) => ['dataset_manager', 'admin'].includes(role));
65+
if (!hasValidRole) {
66+
throw obsrvError(datasetId, "UNAUTHORIZED_ACCESS", "Access denied. User does not have permission to perform this action", "FORBIDDEN", 403);
67+
}
5968
const dataset = await datasetService.createDraftDatasetFromLive(liveDataset, userID)
6069
return _.pick(dataset, attributes);
6170
}

0 commit comments

Comments
 (0)