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:
parent
4e943710f4
commit
787355428a
3 changed files with 45 additions and 4 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue