Managing special role ROLE_BOUND_USER in workers and users windows

All bound users must have the role ROLE_BOUND_USER.

FEA: ItEr76S30PermissionsEnhancements
This commit is contained in:
Manuel Rego Casasnovas 2012-06-15 12:51:07 +02:00
parent 4e943710f4
commit 787355428a
3 changed files with 45 additions and 4 deletions

View file

@ -30,6 +30,7 @@ import org.libreplan.business.common.Registry;
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
import org.libreplan.business.users.daos.IUserDAO;
import org.libreplan.business.users.entities.User;
import org.libreplan.business.users.entities.UserRole;
/**
* This class models a worker.
@ -215,10 +216,13 @@ public class Worker extends Resource {
public void setUser(User user) {
this.user = user;
if (user != null) {
user.addRole(UserRole.ROLE_BOUND_USER);
}
}
@AssertTrue(message = "User already bound to other worker")
public boolean checkUserNotBoundToOtherWorker() {
public boolean checkConstraintUserNotBoundToOtherWorker() {
if (user == null || user.isNewObject()) {
return true;
}
@ -242,7 +246,7 @@ public class Worker extends Resource {
}
@AssertTrue(message = "Limiting resources cannot be bound to any user")
public boolean checkLimitingResourceNotBoundToUser() {
public boolean checkConstraintLimitingResourceNotBoundToUser() {
if (isLimitingResource()) {
return user == null;
}
@ -250,7 +254,7 @@ public class Worker extends Resource {
}
@AssertTrue(message = "Virtual resources cannot be bound to any user")
public boolean checkVirtualResourceNotBoundToUser() {
public boolean checkConstraintVirtualResourceNotBoundToUser() {
if (isVirtual()) {
return user == null;
}
@ -264,4 +268,12 @@ public class Worker extends Resource {
}
}
@AssertTrue(message = "Bound user has proper role")
public boolean checkConstraintBoundUserHaveProperRole() {
if (user == null) {
return true;
}
return user.getRoles().contains(UserRole.ROLE_BOUND_USER);
}
}

View file

@ -305,6 +305,11 @@ public class User extends BaseEntity implements IHumanIdentifiable{
public void setWorker(Worker worker) {
this.worker = worker;
if (worker == null) {
roles.remove(UserRole.ROLE_BOUND_USER);
} else {
roles.add(UserRole.ROLE_BOUND_USER);
}
}
public String getFullName() {

View file

@ -61,6 +61,7 @@ import org.libreplan.business.resources.entities.Worker;
import org.libreplan.business.scenarios.IScenarioManager;
import org.libreplan.business.users.daos.IUserDAO;
import org.libreplan.business.users.entities.User;
import org.libreplan.business.users.entities.UserRole;
import org.libreplan.business.workreports.daos.IWorkReportLineDAO;
import org.libreplan.web.calendars.IBaseCalendarModel;
import org.libreplan.web.common.IntegrationEntityModel;
@ -101,6 +102,8 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
private Worker worker;
private User boundUser;
private ResourceCalendar calendarToRemove = null;
private final ICriterionDAO criterionDAO;
@ -146,6 +149,7 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
@Transactional
public void save() throws ValidationException {
removeCalendarIfNeeded();
resetRoleInOriginalBoundUser();
resourceDAO.save(worker);
if (worker.getCalendar() != null) {
baseCalendarModel.checkInvalidValuesCalendar(worker.getCalendar());
@ -157,6 +161,17 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
localizationsAssigner = null;
}
private void resetRoleInOriginalBoundUser() {
if (boundUser != null) {
User user = worker.getUser();
if (user == null || user.getId() == null
|| !user.getId().equals(boundUser.getId())) {
boundUser.removeRole(UserRole.ROLE_BOUND_USER);
userDAO.save(boundUser);
}
}
}
private void removeCalendarIfNeeded() {
if (calendarToRemove != null) {
try {
@ -221,6 +236,7 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
}
localizationsAssigner = new MultipleCriterionActiveAssigner(
criterionDAO, worker, PredefinedCriterionTypes.LOCATION);
boundUser = null;
}
@Override
@ -232,6 +248,7 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
forceLoadSatisfactions(this.worker);
forceLoadCalendar(this.worker);
forceLoadUser(this.worker);
this.boundUser = this.worker.getUser();
localizationsAssigner = new MultipleCriterionActiveAssigner(
criterionDAO, this.worker,
PredefinedCriterionTypes.LOCATION);
@ -609,8 +626,15 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
public void confirmRemove(Worker worker, boolean removeBoundUser)
throws InstanceNotFoundException {
resourceDAO.remove(worker.getId());
User user = getBoundUserFromDB(worker);
if (removeBoundUser) {
userDAO.remove(worker.getUser());
userDAO.remove(user);
} else {
if (user != null) {
user.removeRole(UserRole.ROLE_BOUND_USER);
userDAO.save(user);
}
}
}