Skip to content

Commit 536f7e5

Browse files
committed
Use "RELEASED" scope for non-curator users, "IN_PROGRESS" for curators
1 parent ce37188 commit 536f7e5

7 files changed

Lines changed: 69 additions & 9 deletions

File tree

apps/nar-v3/src/auth.js

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const keycloak = new Keycloak({
3131
});
3232
const YOUR_APP_SCOPES = "team email profile"; // full list at https://iam.ebrains.eu/auth/realms/hbp/.well-known/openid-configuration
3333

34-
export default function initAuth(main) {
34+
function initAuth(main) {
3535
console.log("DOM content is loaded, initialising Keycloak client...");
3636
keycloak
3737
.init({ flow: "implicit" })
@@ -129,3 +129,40 @@ function verifyMessage(event) {
129129
// Login otherwise
130130
return login(YOUR_APP_SCOPES);
131131
}
132+
133+
function checkPermissions(auth) {
134+
const config = {
135+
headers: {
136+
Authorization: "Bearer " + auth.token,
137+
},
138+
};
139+
140+
const corsProxyUrl = "https://corsproxy.apps.tc.humanbrainproject.eu/";
141+
const userInfoUrl =
142+
corsProxyUrl +
143+
"https://iam.ebrains.eu/auth/realms/hbp/protocol/openid-connect/userinfo";
144+
return fetch(userInfoUrl, config)
145+
.then(response => response.json())
146+
.then((userInfo) => {
147+
//return auth.loadUserInfo().then((userInfo) => {
148+
149+
150+
console.log(userInfo);
151+
if (
152+
userInfo.roles.group.includes(
153+
"group-dataset-curators"
154+
) &&
155+
userInfo.roles.group.includes(
156+
"group-in-depth-curators"
157+
)
158+
) {
159+
console.log("User is a curator");
160+
auth.isCurator = true;
161+
} else {
162+
console.log("User is not a curator");
163+
auth.isCurator = false;
164+
}
165+
});
166+
}
167+
168+
export { initAuth, checkPermissions }

apps/nar-v3/src/main.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { green } from "@mui/material/colors";
2929

3030
import Home, { getLoader as statsLoader } from "./routes/home";
3131
import ErrorPage from "./error-page";
32-
import initAuth from "./auth";
32+
import { initAuth, checkPermissions } from "./auth";
3333
import Datasets, { getLoader as datasetsLoader } from "./routes/datasets";
3434
import Dataset, { getLoader as datasetLoader } from "./routes/dataset";
3535
import PatchClampIndex, { getLoader as patchClampIndexLoader } from "./routes/patchClampRecordings";
@@ -120,6 +120,7 @@ export default function App(props) {
120120
}
121121

122122
function renderApp(auth) {
123+
checkPermissions(auth);
123124
ReactDOM.createRoot(document.getElementById("root")).render(
124125
<App auth={auth} />
125126
);

apps/nar-v3/src/routes/dataset.jsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,16 @@ import { basicDatasetQuery, patchClampDatasetQuery, techniquesQuery } from "./qu
3131

3232
export function getLoader(auth) {
3333
const loader = async ({ params }) => {
34+
let stage = "RELEASED";
35+
if (auth.isCurator) {
36+
stage = "IN_PROGRESS";
37+
}
3438
const techniques = await getKGItem(
3539
"datasets techniques",
3640
techniquesQuery,
3741
params.datasetId,
38-
auth
42+
auth,
43+
stage
3944
);
4045
console.log(techniques.technique);
4146
let query = basicDatasetQuery;
@@ -45,7 +50,7 @@ export function getLoader(auth) {
4550
} else {
4651
console.log("Using basic dataset query");
4752
}
48-
const datasetPromise = getKGItem("datasets detail", query, params.datasetId, auth);
53+
const datasetPromise = getKGItem("datasets detail", query, params.datasetId, auth, stage);
4954
console.log(datasetPromise);
5055
return defer({ dataset: datasetPromise });
5156
};

apps/nar-v3/src/routes/datasets.jsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ import { ephysDatasetsQuery } from "./queryLibrary";
3030

3131
export function getLoader(auth) {
3232
const loader = async () => {
33-
const datasetsPromise = getKGData("datasets summary", ephysDatasetsQuery, auth);
33+
let stage = "RELEASED";
34+
if (auth.isCurator) {
35+
stage = "IN_PROGRESS";
36+
}
37+
const datasetsPromise = getKGData("datasets summary", ephysDatasetsQuery, auth, {}, stage);
3438
console.log(datasetsPromise);
3539
return defer({ datasets: datasetsPromise });
3640
};

apps/nar-v3/src/routes/home.jsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,13 @@ import ProgressIndicator from "../components/ProgressIndicator";
3838

3939
export function getLoader(auth) {
4040
const loader = async () => {
41+
let stage = "RELEASED";
42+
if (auth.isCurator) {
43+
stage = "IN_PROGRESS";
44+
}
4145
const statisticsPromise = Promise.all([
42-
count(patchClampRecordingsQuery, auth),
43-
count(ephysDatasetsQuery, auth),
46+
count(patchClampRecordingsQuery, auth, {}, stage),
47+
count(ephysDatasetsQuery, auth, {}, stage),
4448
]);
4549
console.log(statisticsPromise);
4650
return defer({ counts: statisticsPromise });

apps/nar-v3/src/routes/patchClampRecording.jsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,16 @@ const query = buildKGQuery("core/TissueSample", [
9191

9292
export function getLoader(auth) {
9393
const loader = async ({ params }) => {
94+
let stage = "RELEASED";
95+
if (auth.isCurator) {
96+
stage = "IN_PROGRESS";
97+
}
9498
const tissueSamplePromise = getKGItem(
9599
"patch clamp recordings detail",
96100
query,
97101
params.expId,
98-
auth
102+
auth,
103+
stage
99104
);
100105
console.log(tissueSamplePromise);
101106
return defer({ tissueSample: tissueSamplePromise });

apps/nar-v3/src/routes/patchClampRecordings.jsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ export const query = buildKGQuery("core/TissueSample", [
4848

4949
export function getLoader(auth) {
5050
const loader = async () => {
51-
const tissueSamplesPromise = getKGData("patch clamp recordings summary", query, auth);
51+
let stage = "RELEASED";
52+
if (auth.isCurator) {
53+
stage = "IN_PROGRESS";
54+
}
55+
const tissueSamplesPromise = getKGData("patch clamp recordings summary", query, auth, stage);
5256

5357
console.log(tissueSamplesPromise);
5458
return defer({ tissueSamples: tissueSamplesPromise });

0 commit comments

Comments
 (0)