Skip to content
Snippets Groups Projects
Commit 2592fc74 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

project privileges are set according to user defaults (or general defaults if...

project privileges are set according to user defaults (or general defaults if user specific not defined)
parent e9402223
No related branches found
No related tags found
1 merge request!198Resolve "Configurable default permissions"
Pipeline #
......@@ -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);
});
};
......
......@@ -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;
......
......@@ -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);
......
......@@ -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();
}
}
......
......@@ -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;
......
......@@ -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();
......
......@@ -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;
}
}
}
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment