From 2592fc749ff64e85653bf04c367f2d6b194824d8 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 15 Feb 2018 17:31:16 +0100 Subject: [PATCH] project privileges are set according to user defaults (or general defaults if user specific not defined) --- .../src/main/js/gui/admin/MapsAdminPanel.js | 3 ++ .../services/impl/LayoutService.java | 1 - .../services/impl/ProjectService.java | 48 +++++++++++-------- .../mapviewer/services/impl/UserService.java | 35 ++++++-------- .../services/utils/CreateProjectParams.java | 7 +-- .../services/impl/LayoutServiceTest.java | 6 --- .../services/impl/ProjectServiceTest.java | 36 ++++++++++++-- .../services/impl/UserServiceTest.java | 8 +--- 8 files changed, 83 insertions(+), 61 deletions(-) diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index b32f01eca3..1c1a6e3c14 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -273,6 +273,9 @@ MapsAdminPanel.prototype.onRefreshClicked = function () { var self = this; return ServerConnector.getProjects(true).then(function (projects) { return self.setProjects(projects); + }).then(function () { + //we need to refresh users as well because of privileges + return ServerConnector.getUsers(true); }); }; diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java index be6946bd40..753d7999db 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/LayoutService.java @@ -35,7 +35,6 @@ import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.cache.UploadedFileEntry; import lcsb.mapviewer.model.log.LogType; import lcsb.mapviewer.model.map.MiriamData; -import lcsb.mapviewer.model.map.MiriamType; import lcsb.mapviewer.model.map.layout.ColorSchema; import lcsb.mapviewer.model.map.layout.GeneVariation; import lcsb.mapviewer.model.map.layout.GeneVariationColorSchema; diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index b037f9c125..5e6664973f 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -570,33 +570,41 @@ public class ProjectService implements IProjectService { newUsers[i][j] = users.get(i)[j]; } } - newUsers[users.size()][0] = "anonymous"; - newUsers[users.size()][1] = ""; + Set<User> processedUser = new HashSet<>(); for (int i = 0; i < newUsers.length; i++) { - boolean admin = (users.size() != i); String login = newUsers[i][0]; - String passwd = newUsers[i][1]; User user = userService.getUserByLogin(login); - if (userService.getUserByLogin(login) == null) { - logger.debug("User " + login + " does not exist. Creating"); - user = new User(); - user.setCryptedPassword(passwordEncoder.encode(passwd)); - user.setLogin(login); - userService.addUser(user); - } - if (project != null) { - logger.debug("Privileges for " + login + " for project " + project.getProjectId()); + if (user != null) { + processedUser.add(user); + logger.debug("Root privileges for " + login + " for project " + project.getProjectId()); ObjectPrivilege privilege = new ObjectPrivilege(project, 1, PrivilegeType.VIEW_PROJECT, user); userService.setUserPrivilege(user, privilege); - if (admin) { - privilege = new ObjectPrivilege(project, 1, PrivilegeType.LAYOUT_MANAGEMENT, user); - userService.setUserPrivilege(user, privilege); - privilege = new ObjectPrivilege(project, 1, PrivilegeType.EDIT_COMMENTS_PROJECT, user); - userService.setUserPrivilege(user, privilege); + privilege = new ObjectPrivilege(project, 1, PrivilegeType.LAYOUT_MANAGEMENT, user); + userService.setUserPrivilege(user, privilege); + privilege = new ObjectPrivilege(project, 1, PrivilegeType.EDIT_COMMENTS_PROJECT, user); + userService.setUserPrivilege(user, privilege); + } + } + for (User user : userDao.getAll()) { + if (!processedUser.contains(user)) { + processedUser.add(user); + for (PrivilegeType type : PrivilegeType.values()) { + if (Project.class.equals(type.getPrivilegeObjectType())) { + int level = userService.getUserPrivilegeLevel(user, type, (Integer) null); + if (level < 0) { + if (configurationService.getValue(type).getValue().equalsIgnoreCase("true")) { + level = 1; + } else { + level = 0; + } + } + ObjectPrivilege privilege = new ObjectPrivilege(project, level, type, user); + userService.setUserPrivilege(user, privilege); + } } - } } + } /** @@ -1023,7 +1031,7 @@ public class ProjectService implements IProjectService { if (taxonomyBackend.getNameForTaxonomy(organism) != null) { project.setOrganism(organism); } else { - logger.warn(project.getProjectId()+"\tNo valid organism is provided for project. " + organism); + logger.warn(project.getProjectId() + "\tNo valid organism is provided for project. " + organism); } modelDao.update(originalModel); diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java b/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java index 3336c87546..f2bbf63c14 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java @@ -26,7 +26,6 @@ import lcsb.mapviewer.model.user.ConfigurationElementType; import lcsb.mapviewer.model.user.ObjectPrivilege; import lcsb.mapviewer.model.user.PrivilegeType; import lcsb.mapviewer.model.user.User; -import lcsb.mapviewer.model.user.UserAnnotationSchema; import lcsb.mapviewer.persist.dao.ProjectDao; import lcsb.mapviewer.persist.dao.user.PrivilegeDao; import lcsb.mapviewer.persist.dao.user.UserDao; @@ -289,9 +288,8 @@ public class UserService implements IUserService { for (User user : users) { List<BasicPrivilege> toRemove = new ArrayList<BasicPrivilege>(); for (BasicPrivilege privilege : user.getPrivileges()) { - if (privilege.getType().equals(type) && - privilege instanceof ObjectPrivilege && - integerComparator.compare(((ObjectPrivilege) privilege).getIdObject() ,id)==0) { + if (privilege.getType().equals(type) && privilege instanceof ObjectPrivilege + && integerComparator.compare(((ObjectPrivilege) privilege).getIdObject(), id) == 0) { toRemove.add(privilege); } } @@ -317,19 +315,18 @@ public class UserService implements IUserService { @Override public int getUserPrivilegeLevel(User user, PrivilegeType type, Object object) { - if (object == null) { - throw new InvalidArgumentException("Object cannot be null"); - } Integer id = null; - try { - id = ObjectUtils.getIdOfObject(object); - } catch (Exception e) { - logger.error(e.getMessage(), e); - throw new InvalidArgumentException("Internal server error. Problem with accessing id of the parameter object"); - } - if (!type.getPrivilegeObjectType().isAssignableFrom(object.getClass())) { - throw new InvalidArgumentException("This privilege accept only " + type.getPrivilegeObjectType() - + " objects parameter, but " + object.getClass() + " class found."); + if (object != null) { + try { + id = ObjectUtils.getIdOfObject(object); + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new InvalidArgumentException("Internal server error. Problem with accessing id of the parameter object"); + } + if (!type.getPrivilegeObjectType().isAssignableFrom(object.getClass())) { + throw new InvalidArgumentException("This privilege accept only " + type.getPrivilegeObjectType() + + " objects parameter, but " + object.getClass() + " class found."); + } } return getUserPrivilegeLevel(user, type, id); } @@ -338,9 +335,6 @@ public class UserService implements IUserService { if (type.getPrivilegeClassType() != ObjectPrivilege.class) { throw new InvalidArgumentException("This privilege doesn't accept object parameter"); } - if (id == null) { - throw new InvalidArgumentException("Parameter object has null id value"); - } if (user == null) { throw new InvalidArgumentException("User cannot be null"); } @@ -349,10 +343,11 @@ public class UserService implements IUserService { if (user.getId() != null) { user = userDao.getById(user.getId()); } + IntegerComparator integerComparator = new IntegerComparator(); for (BasicPrivilege privilege : user.getPrivileges()) { if (privilege.getClass() == ObjectPrivilege.class) { ObjectPrivilege oPrivilege = (ObjectPrivilege) privilege; - if (oPrivilege.getType().equals(type) && oPrivilege.getIdObject().equals(id)) { + if (oPrivilege.getType().equals(type) && integerComparator.compare(oPrivilege.getIdObject(), id) == 0) { return privilege.getLevel(); } } diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java index a1f3ab33bc..c6b976f181 100644 --- a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java +++ b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java @@ -136,14 +136,15 @@ public class CreateProjectParams { /** * Directory with the static images that will be stored on server. This - * directory is relative and it's a simple uniqe name within folder with images. + * directory is relative and it's a simple unique name within folder with + * images. */ private String projectDir; private AuthenticationToken authenticationToken; /** - * Map that contains informnation what kind of annotators should be used for + * Map that contains information what kind of annotators should be used for * specific class. */ private Map<Class<?>, List<String>> annotatorsMap = null; @@ -156,7 +157,7 @@ public class CreateProjectParams { /** * Map that contains information which {@link MiriamType miriam types} are - * obigatory for which class. + * obligatory for which class. */ private Map<Class<? extends BioEntity>, Set<MiriamType>> requiredAnnotations = null; diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest.java index b148ea934a..ca85d27c3a 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/LayoutServiceTest.java @@ -95,12 +95,6 @@ public class LayoutServiceTest extends ServiceTestFunctions { projectService.addProject(project); - if (userDao.getUserByLogin("john.doe")!=null) { - userService.deleteUser(userDao.getUserByLogin("john.doe")); - } - if (userDao.getUserByLogin("john.doe.bis")!=null) { - userService.deleteUser(userDao.getUserByLogin("john.doe.bis")); - } createUser(); createUser2(); diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java index 40d94a3fc6..67a3fcdfd6 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java @@ -56,6 +56,7 @@ import lcsb.mapviewer.services.overlay.AnnotatedObjectTreeRow; import lcsb.mapviewer.services.utils.CreateProjectParams; import lcsb.mapviewer.services.utils.data.BuildInLayout; import lcsb.mapviewer.services.view.AuthenticationToken; +import lcsb.mapviewer.services.view.ConfigurationView; import lcsb.mapviewer.services.view.ProjectView; @Rollback(true) @@ -235,10 +236,9 @@ public class ProjectServiceTest extends ServiceTestFunctions { images(true).// async(false).// projectDir(tmpResultDir).// - addUser("gawi", "gawi").// + addUser("admin", "admin").// analyzeAnnotations(true)); - AuthenticationToken token = userService.login("gawi", "gawi"); - Project project = projectService.getProjectByProjectId(project_id, token); + Project project = projectService.getProjectByProjectId(project_id, adminToken); assertEquals(ProjectStatus.DONE, project.getStatus()); projectService.removeProject(project, null, false, adminToken); } catch (Exception e) { @@ -251,6 +251,9 @@ public class ProjectServiceTest extends ServiceTestFunctions { public void testCreateComplex() throws Exception { String projectId = "test_id"; try { + createUser(); + AuthenticationToken token = userService.login(user.getLogin(), "passwd"); + ZipEntryFile entry1 = new ModelZipEntryFile("main.xml", "main", true, false, SubmodelType.UNKNOWN); ZipEntryFile entry2 = new ModelZipEntryFile("s1.xml", "s1", false, false, SubmodelType.UNKNOWN); ZipEntryFile entry3 = new ModelZipEntryFile("s2.xml", "s2", false, false, SubmodelType.UNKNOWN); @@ -272,9 +275,8 @@ public class ProjectServiceTest extends ServiceTestFunctions { images(true).// async(false).// projectDir(tmpResultDir).// - addUser("gawi", "gawi").// + addUser(user.getLogin(), "admin").// analyzeAnnotations(true)); - AuthenticationToken token = userService.login("gawi", "gawi"); Project project = projectService.getProjectByProjectId(projectId, token); Model model = modelService.getLastModelByProjectId(projectId, token); @@ -893,4 +895,28 @@ public class ProjectServiceTest extends ServiceTestFunctions { } } + @Test + public void testCheckPrivilegesAfterCreateProject() throws Exception { + try { + createUser(); + + String name = "Some_id"; + String filename = "testFiles/complexModel/empty_complex_model.zip"; + Project project = createComplexProject(name, filename); + + for (PrivilegeType type : PrivilegeType.values()) { + if (Project.class.equals(type.getPrivilegeObjectType())) { + ConfigurationView confParam = configurationService.getValue(type); + assertEquals("User has invalid " + type + " privilege for new project", + confParam.getValue().equalsIgnoreCase("true"), userService.userHasPrivilege(user, type, project)); + } + } + + projectService.removeProject(project, null, false, adminToken); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + } diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java index 967910ca14..128344b26f 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java @@ -146,12 +146,8 @@ public class UserServiceTest extends ServiceTestFunctions { } @Test - public void testUserHasPrivilegeUserPrivilegeTypeObject2() { - try { - userService.userHasPrivilege(user, PrivilegeType.VIEW_PROJECT, null); - fail("Exception should occur"); - } catch (InvalidArgumentException e) { - } + public void testUserHasPrivilegeForDefaultProjectWithoutSetting() { + assertFalse(userService.userHasPrivilege(user, PrivilegeType.VIEW_PROJECT, null)); } @Test -- GitLab