From 6e6ccdad17757e08f8a3309fd2a92838e986f406 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 28 Jun 2018 13:47:06 +0200 Subject: [PATCH] when user has no access to edit map he cannot click edit/remove button --- frontend-js/src/main/js/Admin.js | 21 +++++- frontend-js/src/main/js/gui/Panel.js | 13 ++++ .../src/main/js/gui/admin/MapsAdminPanel.js | 68 +++++++++++++------ .../src/main/js/map/data/PrivilegeType.js | 2 +- frontend-js/src/main/js/minerva.js | 1 + .../test/js/gui/admin/MapsAdminPanel-test.js | 33 ++++----- 6 files changed, 94 insertions(+), 44 deletions(-) diff --git a/frontend-js/src/main/js/Admin.js b/frontend-js/src/main/js/Admin.js index 656928f373..8d779cee92 100644 --- a/frontend-js/src/main/js/Admin.js +++ b/frontend-js/src/main/js/Admin.js @@ -34,6 +34,7 @@ function Admin(options) { self.setElement(options.getElement()); self.setConfiguration(options.getConfiguration()); + self.setServerConnector(options.getServerConnector()); self.setGuiUtils(new GuiUtils()); self._createGui(); } @@ -116,7 +117,8 @@ Admin.prototype.addTab = function (params, navElement, contentElement) { element: contentDiv, name: params.name, project: self.getProject(), - configuration: self.getConfiguration() + configuration: self.getConfiguration(), + serverConnector: self.getServerConnector() })); }; @@ -169,4 +171,21 @@ Admin.prototype.destroy = function () { return Promise.all(promises); }; +/** + * + * @param {ServerConnector} serverConnector + */ +Admin.prototype.setServerConnector = function (serverConnector) { + this._serverConnector = serverConnector; +}; + +/** + * + * @returns {ServerConnector} + */ +Admin.prototype.getServerConnector = function () { + return this._serverConnector; +}; + + module.exports = Admin; diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js index a285da4f0f..3a931f2420 100644 --- a/frontend-js/src/main/js/gui/Panel.js +++ b/frontend-js/src/main/js/gui/Panel.js @@ -20,6 +20,7 @@ var xss = require('xss'); * @param {string} params.panelName * @param {boolean} params.scrollable * @param {string} [params.helpTip] + * @param {ServerConnector} [params.serverConnector] * @param params.parent * * @constructor @@ -32,6 +33,7 @@ function Panel(params) { var self = this; self.setParent(params.parent); + self.setServerConnector(params.serverConnector); var configuration = params.configuration; if (params.configuration === undefined) { configuration = self.getMap().getConfiguration(); @@ -303,8 +305,19 @@ Panel.prototype.destroy = function () { * @returns {ServerConnector} */ Panel.prototype.getServerConnector = function () { + if (this._serverConnector !== undefined) { + return this._serverConnector; + } return this.getMap().getServerConnector(); }; +/** + * + * @param {ServerConnector} serverConnector + */ +Panel.prototype.setServerConnector = function (serverConnector) { + this._serverConnector = serverConnector; +}; + module.exports = Panel; diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index 2e87b3d19a..939f0eb159 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -152,14 +152,25 @@ MapsAdminPanel.prototype._createProjectTableRow = function () { return projectsRow; }; +/** + * + * @returns {Promise} + */ MapsAdminPanel.prototype.init = function () { var self = this; - return ServerConnector.getProjects().then(function (projects) { + return self.getServerConnector().getProjects().then(function (projects) { return self.setProjects(projects); }); }; -MapsAdminPanel.prototype.projectToTableRow = function (project, row) { +/** + * + * @param {Project} project + * @param {Array} [row] + * @param {User} user + * @returns {Array} + */ +MapsAdminPanel.prototype.projectToTableRow = function (project, row, user) { var self = this; var disease = self.getHtmlStringLink(project.getDisease()); var organism = self.getHtmlStringLink(project.getOrganism()); @@ -192,8 +203,12 @@ MapsAdminPanel.prototype.projectToTableRow = function (project, row) { row[3] = organism; row[4] = status; - row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'><i class='fa fa-edit' style='font-size:17px'></i></button>"; - row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'><i class='fa fa-trash-o' style='font-size:17px'></button>"; + var disabled = " disabled "; + if (user.hasPrivilege(self.getConfiguration().getPrivilegeType(PrivilegeType.CONFIGURATION_MANAGE))) { + disabled = ""; + } + row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'" + disabled + "><i class='fa fa-edit' style='font-size:17px'></i></button>"; + row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'" + disabled + "><i class='fa fa-trash-o' style='font-size:17px'></button>"; return row; }; @@ -211,20 +226,28 @@ MapsAdminPanel.prototype.getHtmlStringLink = function (annotation) { }; +/** + * + * @param {Project[]} projects + * @returns {Promise} + */ MapsAdminPanel.prototype.setProjects = function (projects) { var self = this; - var dataTable = $("[name='projectsTable']", self.getElement()).DataTable(); - var data = []; - var page = dataTable.page(); - - for (var i = 0; i < projects.length; i++) { - var project = projects[i]; - var rowData = self.projectToTableRow(project); - self.addUpdateListener(project, rowData); - data.push(rowData); - } - //it should be simplified, but I couldn't make it work - dataTable.clear().rows.add(data).page(page).draw(false).page(page).draw(false); + + return self.getServerConnector().getLoggedUser().then(function (user) { + var dataTable = $("[name='projectsTable']", self.getElement()).DataTable(); + var data = []; + var page = dataTable.page(); + + for (var i = 0; i < projects.length; i++) { + var project = projects[i]; + var rowData = self.projectToTableRow(project, undefined, user); + self.addUpdateListener(project, rowData); + data.push(rowData); + } + //it should be simplified, but I couldn't make it work + dataTable.clear().rows.add(data).page(page).draw(false).page(page).draw(false); + }); }; MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) { @@ -238,12 +261,13 @@ MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) { } } var listener = function () { - self.projectToTableRow(project, dataTableRow); - var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); - if (row.length > 0) { - row.data(dataTableRow).draw(); - } - + return self.getServerConnector().getLoggedUser().then(function (user) { + self.projectToTableRow(project, dataTableRow, user); + var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); + if (row.length > 0) { + row.data(dataTableRow).draw(); + } + }); }; listener.listenerName = listenerName; project.addListener("onreload", listener); diff --git a/frontend-js/src/main/js/map/data/PrivilegeType.js b/frontend-js/src/main/js/map/data/PrivilegeType.js index 2ec015293c..54e528f121 100644 --- a/frontend-js/src/main/js/map/data/PrivilegeType.js +++ b/frontend-js/src/main/js/map/data/PrivilegeType.js @@ -18,7 +18,7 @@ PrivilegeType.prototype.constructor = PrivilegeType; PrivilegeType.CONFIGURATION_MANAGE = 'CONFIGURATION_MANAGE'; PrivilegeType.USER_MANAGEMENT = 'USER_MANAGEMENT'; - +PrivilegeType.PROJECT_MANAGEMENT = 'PROJECT_MANAGEMENT'; PrivilegeType.prototype.setObjectType = function (objectType) { this._objectType = objectType; diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index 2382deb90c..c9fc776c29 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -611,6 +611,7 @@ function createAdmin(params) { if (!(params instanceof CustomMapOptions)) { params = new CustomMapOptions(params); } + params.setServerConnector(ServerConnector); initGlobals(params); params.getElement().style.display = "table"; params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" diff --git a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js index 432507855c..1b3a505b23 100644 --- a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js @@ -8,15 +8,20 @@ var logger = require('../../logger'); var assert = require('assert'); +function createMapsAdminPanel(configuration) { + return new MapsAdminPanel({ + element: testDiv, + configuration: configuration, + serverConnector: ServerConnector + }); +} + describe('MapsAdminPanel', function () { it('refresh', function () { var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new MapsAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createMapsAdminPanel(configuration); return mapTab.init(); }).then(function () { return mapTab.onRefreshClicked(); @@ -28,10 +33,7 @@ describe('MapsAdminPanel', function () { it('showLogs', function () { var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new MapsAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createMapsAdminPanel(configuration); return mapTab.init(); }).then(function () { return mapTab.showLogs("sample", 'error'); @@ -45,10 +47,7 @@ describe('MapsAdminPanel', function () { helper.loginAsAdmin(); var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new MapsAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createMapsAdminPanel(configuration); return mapTab.init(); }).then(function () { return ServerConnector.getProject(); @@ -65,10 +64,7 @@ describe('MapsAdminPanel', function () { it('default', function () { var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new MapsAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createMapsAdminPanel(configuration); return mapTab.init(); }).then(function () { return mapTab.onAddClicked(); @@ -79,10 +75,7 @@ describe('MapsAdminPanel', function () { it('close and reopen', function () { var mapTab; return ServerConnector.getConfiguration().then(function (configuration) { - mapTab = new MapsAdminPanel({ - element: testDiv, - configuration: configuration - }); + mapTab = createMapsAdminPanel(configuration); return mapTab.init(); }).then(function () { return mapTab.onAddClicked(); -- GitLab