Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TASK-6272: IVA Catalog browser have "Edit" greyed-out in the Actions drop-down for non-admin #935

Merged
merged 6 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/webcomponents/clinical/clinical-analysis-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import "../commons/opencb-grid-toolbar.js";
import LitUtils from "../commons/utils/lit-utils.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import ModalUtils from "../commons/modal/modal-utils";
import ModalUtils from "../commons/modal/modal-utils.js";

export default class ClinicalAnalysisGrid extends LitElement {

Expand Down Expand Up @@ -641,7 +641,7 @@ export default class ClinicalAnalysisGrid extends LitElement {
const session = this.opencgaSession;
const url = `#interpreter/${session.project.id}/${session.study.id}/${row.id}`;
const hasWriteAccess = OpencgaCatalogUtils.checkPermissions(session.study, session.user.id, "WRITE_CLINICAL_ANALYSIS");
const hasAdminAccess = OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled";
const hasAdminAccess = hasWriteAccess || "disabled";
const lockActionIcon = row.locked ? "fa-unlock" : "fa-lock";
const lockActionText = row.locked ? "Unlock" : "Lock";
const isOwnOrIsLocked = row.locked || !row.analysts?.some(analyst => analyst.id === this.opencgaSession?.user?.id) ? "disabled" : "";
Expand Down
9 changes: 6 additions & 3 deletions src/webcomponents/cohort/cohort-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import PolymerUtils from "../PolymerUtils.js";
import "../commons/opencb-grid-toolbar.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import ModalUtils from "../commons/modal/modal-utils";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils";
import ModalUtils from "../commons/modal/modal-utils.js";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils.js";
import WebUtils from "../commons/utils/web-utils.js";


export default class CohortGrid extends LitElement {
Expand Down Expand Up @@ -144,6 +145,8 @@ export default class CohortGrid extends LitElement {
// </catalog-browser-grid-config>`
// }
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -320,7 +323,7 @@ export default class CohortGrid extends LitElement {
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li>
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled" }">
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
</li>
Expand Down
7 changes: 5 additions & 2 deletions src/webcomponents/commons/opencb-grid-toolbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import LitUtils from "./utils/lit-utils";
import ModalUtils from "./modal/modal-utils.js";
import "./opencga-export.js";
import "../variant/interpretation/variant-interpreter-grid-config.js";
import WebUtils from "./utils/web-utils.js";

export default class OpencbGridToolbar extends LitElement {

Expand Down Expand Up @@ -74,6 +75,8 @@ export default class OpencbGridToolbar extends LitElement {
...this.getDefaultConfig(),
...this.config,
};

this.permissionID = WebUtils.getPermissionID(this._config.resource, "WRITE");
}

super.update(changedProperties);
Expand Down Expand Up @@ -120,7 +123,7 @@ export default class OpencbGridToolbar extends LitElement {
isCreateDisabledTooltip = this._config?.create?.display?.disabledTooltip;
} else {
const hasPermissions = OpencgaCatalogUtils
.checkPermissions(this.opencgaSession?.study, this.opencgaSession?.user?.id, `WRITE_${this._config.resource}`);
.checkPermissions(this.opencgaSession?.study, this.opencgaSession?.user?.id, this.permissionID);
if (!hasPermissions) {
isCreateDisabled = true;
isCreateDisabledTooltip = "Creating a new instance requires write permissions on the study. Please, contact your administrator if you need different access rights.";
Expand Down Expand Up @@ -194,7 +197,7 @@ export default class OpencbGridToolbar extends LitElement {
<!-- Add modals-->
${(this._config?.create &&
(this._settings.showCreate || this._settings.showNew) &&
OpencgaCatalogUtils.checkPermissions(this.opencgaSession?.study, this.opencgaSession?.user?.id, `WRITE_${this._config.resource}`)) ?
OpencgaCatalogUtils.checkPermissions(this.opencgaSession?.study, this.opencgaSession?.user?.id, this.permissionID)) ?
ModalUtils.create(this, `${this._prefix}CreateModal`, this._config.create) :
nothing}

Expand Down
16 changes: 16 additions & 0 deletions src/webcomponents/commons/utils/web-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,22 @@ export default class WebUtils {
}
}

static getPermissionID(resource, mode) {
// Note 20240620 Vero: The permissions IDs have been retrieved from the following document:
// https://github.com/opencb/opencga/blob/develop/docs/manual/data-management/sharing-and-permissions/permissions.md
const mapResourcePermissionId = {
"INDIVIDUAL": "INDIVIDUALS",
"SAMPLE": "SAMPLES",
"COHORT": "COHORTS",
"FAMILY": "FAMILIES",
"DISEASE_PANEL": "PANELS",
"JOB": "JOBS",
"FILE": "FILES",
"CLINICAL_ANALYSIS": "CLINICAL_ANALYSIS",
};
return (resource && mapResourcePermissionId[resource] && mode) ? `${mode.toUpperCase()}_${mapResourcePermissionId[resource]}` : "";
}

static getIVALink(opencgaSession, tool, query = {}) {
const baseUrl = (new URL(window.location.pathname, window.location.origin));
let queryStr = "";
Expand Down
10 changes: 8 additions & 2 deletions src/webcomponents/disease-panel/disease-panel-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-util
import LitUtils from "../commons/utils/lit-utils.js";
import "../commons/catalog-browser-grid-config.js";
import "../commons/opencb-grid-toolbar.js";
import ModalUtils from "../commons/modal/modal-utils";
import CatalogGridFormatter from "../commons/catalog-grid-formatter";
import ModalUtils from "../commons/modal/modal-utils.js";
import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import WebUtils from "../commons/utils/web-utils.js";

export default class DiseasePanelGrid extends LitElement {

Expand Down Expand Up @@ -142,6 +143,8 @@ export default class DiseasePanelGrid extends LitElement {
// </catalog-browser-grid-config>`
// }
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -460,6 +463,9 @@ export default class DiseasePanelGrid extends LitElement {
<a data-action="edit" class="btn force-text-left ${isAdmin ? "" : "disabled"}">
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
gpveronica marked this conversation as resolved.
Show resolved Hide resolved
</li>
<li>
<a data-action="delete" href="javascript: void 0" class="btn force-text-left ${isAdmin ? "" : "disabled"}">
Expand Down
9 changes: 6 additions & 3 deletions src/webcomponents/family/family-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ import UtilsNew from "../../core/utils-new.js";
import GridCommons from "../commons/grid-commons.js";
import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils";
import ModalUtils from "../commons/modal/modal-utils";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils.js";
import ModalUtils from "../commons/modal/modal-utils.js";
import "../commons/opencb-grid-toolbar.js";
import WebUtils from "../commons/utils/web-utils.js";

export default class FamilyGrid extends LitElement {

Expand Down Expand Up @@ -138,6 +139,8 @@ export default class FamilyGrid extends LitElement {
// </catalog-browser-grid-config>`
// }
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -534,7 +537,7 @@ export default class FamilyGrid extends LitElement {
</li>
<li role="separator" class="divider"></li>
<li>
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled" }">
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
</li>
Expand Down
7 changes: 5 additions & 2 deletions src/webcomponents/file/file-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import "../commons/opencb-grid-toolbar.js";
import "../loading-spinner.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils.js";
import WebUtils from "../commons/utils/web-utils.js";


export default class OpencgaFileGrid extends LitElement {
Expand Down Expand Up @@ -117,6 +118,8 @@ export default class OpencgaFileGrid extends LitElement {
`,
},
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -415,7 +418,7 @@ export default class OpencgaFileGrid extends LitElement {
</li>
<li role="separator" class="divider"></li>
<li>
<a data-action="edit" class="btn force-text-left disabled ${OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled" }">
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
gpveronica marked this conversation as resolved.
Show resolved Hide resolved
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
</li>
Expand Down
9 changes: 6 additions & 3 deletions src/webcomponents/individual/individual-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ import UtilsNew from "../../core/utils-new.js";
import GridCommons from "../commons/grid-commons.js";
import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils";
import ModalUtils from "../commons/modal/modal-utils";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils.js";
import ModalUtils from "../commons/modal/modal-utils.js";
import "../commons/opencb-grid-toolbar.js";
import WebUtils from "../commons/utils/web-utils.js";

export default class IndividualGrid extends LitElement {

Expand Down Expand Up @@ -142,6 +143,8 @@ export default class IndividualGrid extends LitElement {
// </catalog-browser-grid-config>`
// }
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -572,7 +575,7 @@ export default class IndividualGrid extends LitElement {
</li>
<li role="separator" class="divider"></li>
<li>
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled" }">
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
</li>
Expand Down
9 changes: 6 additions & 3 deletions src/webcomponents/job/job-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ import CatalogGridFormatter from "../commons/catalog-grid-formatter.js";
import "../commons/opencb-grid-toolbar.js";
import "../loading-spinner.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils";
import ModalUtils from "../commons/modal/modal-utils";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils.js";
import ModalUtils from "../commons/modal/modal-utils.js";
import WebUtils from "../commons/utils/web-utils.js";

export default class JobGrid extends LitElement {

Expand Down Expand Up @@ -148,6 +149,8 @@ export default class JobGrid extends LitElement {
// </catalog-browser-grid-config>`
// }
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -573,7 +576,7 @@ export default class JobGrid extends LitElement {
</li>
<li role="separator" class="divider"></li>
<li>
<a data-action="edit" class="btn force-text-left disabled ${OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled" }">
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
gpveronica marked this conversation as resolved.
Show resolved Hide resolved
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
</li>
Expand Down
10 changes: 8 additions & 2 deletions src/webcomponents/sample/sample-grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ import "../commons/opencb-grid-toolbar.js";
import OpencgaCatalogUtils from "../../core/clients/opencga/opencga-catalog-utils.js";
import NotificationUtils from "../commons/utils/notification-utils.js";
import "./sample-update.js";
import ModalUtils from "../commons/modal/modal-utils";
import ModalUtils from "../commons/modal/modal-utils.js";
import WebUtils from "../commons/utils/web-utils.js";


export default class SampleGrid extends LitElement {
Expand Down Expand Up @@ -90,6 +91,8 @@ export default class SampleGrid extends LitElement {
...this.getDefaultConfig(),
...this.config,
};


gpveronica marked this conversation as resolved.
Show resolved Hide resolved
this.gridCommons = new GridCommons(this.gridId, this, this._config);

// Config for the grid toolbar
Expand All @@ -116,6 +119,7 @@ export default class SampleGrid extends LitElement {
</sample-create>
`,
},

// Uncomment in case we need to change defaults
// export: {
// display: {
Expand Down Expand Up @@ -143,6 +147,8 @@ export default class SampleGrid extends LitElement {
// </catalog-browser-grid-config>`
// }
};

this.permissionID = WebUtils.getPermissionID(this.toolbarConfig.resource, "WRITE");
}

renderTable() {
Expand Down Expand Up @@ -455,7 +461,7 @@ export default class SampleGrid extends LitElement {
</li>
<li role="separator" class="divider"></li>
<li>
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.isAdmin(this.opencgaSession.study, this.opencgaSession.user.id) || "disabled" }">
<a data-action="edit" class="btn force-text-left ${OpencgaCatalogUtils.checkPermissions(this.opencgaSession.study, this.opencgaSession.user.id, this.permissionID) || "disabled" }">
<i class="fas fa-edit icon-padding" aria-hidden="true"></i> Edit ...
</a>
</li>
Expand Down
Loading