diff --git a/frontend-js/src/main/js/gui/admin/EditUserDialog.js b/frontend-js/src/main/js/gui/admin/EditUserDialog.js index 15e9e545586b63e2c297852a9f4cebabadd5d602..375e96c60ef6cef6b0ffbef593da5824fc117571 100644 --- a/frontend-js/src/main/js/gui/admin/EditUserDialog.js +++ b/frontend-js/src/main/js/gui/admin/EditUserDialog.js @@ -295,14 +295,14 @@ EditUserDialog.prototype.init = function () { EditUserDialog.prototype.initProjectsTab = function () { var self = this; - var usersTable = $("[name=projectsTable]", self.getElement())[0]; + var projectsTable = $("[name=projectsTable]", self.getElement())[0]; var configuration = self.getConfiguration(); var columns = self.createUserPrivilegeColumns(); - $(usersTable).DataTable({ + $(projectsTable).DataTable({ columns: columns }); - $(usersTable).on("click", "[name='project-privilege-checkbox']", function () { + $(projectsTable).on("click", "[name='project-privilege-checkbox']", function () { var data = $(this).attr("data").split("-"); var privilegeType = data[0]; var objectId = data[1]; @@ -335,7 +335,7 @@ EditUserDialog.prototype.initProjectsTab = function () { EditUserDialog.prototype.initPrivilegesTab = function () { var self = this; - var usersTable = $("[name=privilegesTable]", self.getElement())[0]; + var privilegesTable = $("[name=privilegesTable]", self.getElement())[0]; var configuration = self.getConfiguration(); var columns = [{ @@ -343,34 +343,51 @@ EditUserDialog.prototype.initPrivilegesTab = function () { }, { title: "Value" }]; - var dataTable = $(usersTable).DataTable({ + var dataTable = $(privilegesTable).DataTable({ columns: columns }); var data = []; for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { var privilege = configuration.getPrivilegeTypes()[i]; + var option; if (privilege.getObjectType() === null) { if (privilege.getValueType() === "boolean") { var checked = ""; if (self.getUser().hasPrivilege(privilege)) { checked = "checked" + } else if (this.getIsNewUser()) { + option = this.getConfiguration().getOption('DEFAULT_' + privilege.getName()); + if (option !== null && option !== undefined) { + if (option.getValue().toLowerCase() === "true") { + self.getUser().setPrivilege({type: privilege}); + checked = "checked"; + } + } } data.push([ "<span>" + privilege.getCommonName() + "</span>", "<input type='checkbox' name='privilege-checkbox' data='" + privilege.getName() + "' " + checked + " />" ]); } else if (privilege.getValueType() === "int") { + var value = self.getUser().getPrivilegeValue(privilege); + if (this.getIsNewUser()) { + option = this.getConfiguration().getOption('DEFAULT_' + privilege.getName()); + if (option !== null && option !== undefined) { + value = parseInt(option.getValue()); + self.getUser().setPrivilege({type: privilege, value: value}); + } + } data.push([ "<span>" + privilege.getCommonName() + "</span>", - "<input name='privilege-int' data='" + privilege.getName() + "' value='" + self.getUser().getPrivilegeValue(privilege) + "' />" + "<input name='privilege-int' data='" + privilege.getName() + "' value='" + value + "' />" ]); } } } dataTable.clear().rows.add(data).draw(); - $(usersTable).on("click", "[name='privilege-checkbox']", function () { + $(privilegesTable).on("click", "[name='privilege-checkbox']", function () { var privilegeType = $(this).attr("data"); for (var i = 0; i < configuration.getPrivilegeTypes().length; i++) { var privilege = configuration.getPrivilegeTypes()[i]; @@ -380,7 +397,7 @@ EditUserDialog.prototype.initPrivilegesTab = function () { } } }); - $(usersTable).on("change", "[name='privilege-int']", function () { + $(privilegesTable).on("change", "[name='privilege-int']", function () { var privilegeType = $(this).attr("data"); var value = $(this).val(); value = parseInt(value); @@ -468,6 +485,15 @@ EditUserDialog.prototype.projectToTableRow = function (project, columns) { var checked = ""; if (user.hasPrivilege(privilege, id)) { checked = "checked"; + } else if (this.getIsNewUser()) { + var option = this.getConfiguration().getOption('DEFAULT_' + privilege.getName()); + if (option !== null && option !== undefined) { + if (option.getValue().toLowerCase() === "true") { + + user.setPrivilege({type: privilege, objectId: id}); + checked = "checked"; + } + } } row.push("<input type='checkbox' name='project-privilege-checkbox' data='" + privilege.getName() + "-" + id + "' " + checked + " />"); } diff --git a/frontend-js/src/main/js/map/data/User.js b/frontend-js/src/main/js/map/data/User.js index c123aa391785d01cdc1b1c03aa17aa22833ddb79..38df58677378362b0ddc77c906b391216ba2b9b9 100644 --- a/frontend-js/src/main/js/map/data/User.js +++ b/frontend-js/src/main/js/map/data/User.js @@ -7,6 +7,7 @@ var logger = require('../../logger'); var UserPreferences = require('./UserPreferences'); var ObjectWithListeners = require('../../ObjectWithListeners'); +var InvalidArgumentError = require('../../InvalidArgumentError'); /** * @@ -208,6 +209,8 @@ User.prototype.setPrivileges = function (privileges) { this._privileges = privileges; if (this._privileges === undefined) { this._privileges = []; + } else if (Object.prototype.toString.call(privileges) !== '[object Array]') { + throw new InvalidArgumentError("privileges property must be an array"); } }; diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java index 43398352563d06ba223e5fb2396f8f39f72629be..3ee62cd1c649594650180a0c3b38d91637b90cbb 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java @@ -134,7 +134,7 @@ public class UserRestImpl extends BaseRestImpl { ldapAvailable = false; } value = ldapAvailable; - } else if (column.equals("privileges") && admin) { + } else if (column.equals("privileges")) { value = preparePrivileges(user); } else if (column.equals("preferences")) { value = preparePreferences(user); @@ -615,6 +615,10 @@ public class UserRestImpl extends BaseRestImpl { } } getUserService().addUser(user); + getUserService().createDefaultBasicPrivilegesForUser(user); + for (Project project : getProjectService().getAllProjects()) { + getUserService().createDefaultProjectPrivilegesForUser(project, user); + } return getUser(token, login, ""); }