ItEr44S14CUAsignarUsuarioAProxectoPlanificacionItEr43S19: Added restrictions in the creation of orders.
Only users with ROLE_CREATE_ORDER will find the 'create' button and the 'save' buttons in a new order enabled. The user creating an order will be added as authorized to write that order by default.
This commit is contained in:
parent
13309b3809
commit
45b6069430
5 changed files with 81 additions and 25 deletions
|
|
@ -42,6 +42,8 @@ import org.navalplanner.business.orders.entities.OrderElement;
|
|||
import org.navalplanner.business.orders.entities.OrderLine;
|
||||
import org.navalplanner.business.orders.entities.OrderStatusEnum;
|
||||
import org.navalplanner.business.templates.entities.OrderTemplate;
|
||||
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
||||
import org.navalplanner.business.users.entities.UserRole;
|
||||
import org.navalplanner.web.common.IMessagesForUser;
|
||||
import org.navalplanner.web.common.Level;
|
||||
import org.navalplanner.web.common.MessagesForUser;
|
||||
|
|
@ -57,6 +59,7 @@ import org.navalplanner.web.orders.labels.LabelsAssignmentToOrderElementComponen
|
|||
import org.navalplanner.web.orders.materials.AssignedMaterialsToOrderElementController;
|
||||
import org.navalplanner.web.orders.materials.OrderElementMaterialAssignmentsComponent;
|
||||
import org.navalplanner.web.planner.order.IOrderPlanningGate;
|
||||
import org.navalplanner.web.security.SecurityUtils;
|
||||
import org.navalplanner.web.templates.IOrderTemplatesControllerEntryPoints;
|
||||
import org.navalplanner.web.tree.TreeComponent;
|
||||
import org.navalplanner.web.users.OrderAuthorizationController;
|
||||
|
|
@ -148,7 +151,7 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
orderModel.prepareCreationFrom(template);
|
||||
showEditWindow(_("Create order from Template"));
|
||||
orderAuthorizationController
|
||||
.setOrder((Order) orderModel.getOrder());
|
||||
.initCreate((Order) orderModel.getOrder());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -178,6 +181,11 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
super.doAfterCompose(comp);
|
||||
messagesForUser = new MessagesForUser(messagesContainer);
|
||||
comp.setVariable("controller", this, true);
|
||||
|
||||
if(SecurityUtils.isUserInRole(UserRole.ROLE_CREATE_ORDER)) {
|
||||
((Button)listWindow.getFellowIfAny("show_create_form")).setDisabled(false);
|
||||
((Button)listWindow.getFellowIfAny("create_from_template_button")).setDisabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void addEditWindowIfNeeded() {
|
||||
|
|
@ -333,7 +341,7 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
if (couldSave) {
|
||||
selectTab(getCurrentTab().getId());
|
||||
orderModel.initEdit((Order) orderModel.getOrder());
|
||||
orderAuthorizationController.setOrder((Order) orderModel.getOrder());
|
||||
orderAuthorizationController.initEdit((Order) orderModel.getOrder());
|
||||
initializeTabs();
|
||||
showWindow(editWindow);
|
||||
}
|
||||
|
|
@ -463,7 +471,7 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
public void initEdit(Order order) {
|
||||
orderModel.initEdit(order);
|
||||
addEditWindowIfNeeded();
|
||||
orderAuthorizationController.setOrder(order);
|
||||
orderAuthorizationController.initEdit(order);
|
||||
showEditWindow(_("Edit order"));
|
||||
}
|
||||
|
||||
|
|
@ -497,7 +505,7 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
try {
|
||||
orderModel.prepareForCreate();
|
||||
showEditWindow(_("Create order"));
|
||||
orderAuthorizationController.setOrder((Order) orderModel.getOrder());
|
||||
orderAuthorizationController.initCreate((Order) orderModel.getOrder());
|
||||
} catch (ConcurrentModificationException e) {
|
||||
messagesForUser.showMessage(Level.ERROR, e.getMessage());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ import org.navalplanner.business.users.entities.UserOrderAuthorization;
|
|||
*/
|
||||
public interface IOrderAuthorizationModel {
|
||||
|
||||
void initSetOrder(Order order);
|
||||
void initCreate(Order order);
|
||||
|
||||
void initEdit(Order order);
|
||||
|
||||
void confirmSave();
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.navalplanner.business.users.entities.Profile;
|
|||
import org.navalplanner.business.users.entities.ProfileOrderAuthorization;
|
||||
import org.navalplanner.business.users.entities.User;
|
||||
import org.navalplanner.business.users.entities.UserOrderAuthorization;
|
||||
import org.navalplanner.business.users.entities.UserRole;
|
||||
import org.navalplanner.web.common.IMessagesForUser;
|
||||
import org.navalplanner.web.common.Level;
|
||||
import org.navalplanner.web.common.Util;
|
||||
|
|
@ -60,8 +61,14 @@ public class OrderAuthorizationController extends GenericForwardComposer{
|
|||
this.window = comp;
|
||||
}
|
||||
|
||||
public void setOrder(Order order) {
|
||||
orderAuthorizationModel.initSetOrder(order);
|
||||
public void initCreate(Order order) {
|
||||
orderAuthorizationModel.initCreate(order);
|
||||
checkCreationPermissions();
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
public void initEdit(Order order) {
|
||||
orderAuthorizationModel.initEdit(order);
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
|
|
@ -127,4 +134,19 @@ public class OrderAuthorizationController extends GenericForwardComposer{
|
|||
public void setMessagesForUserComponent(IMessagesForUser component) {
|
||||
messagesForUser = component;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the creation permissions of the current user and enables/disables
|
||||
* the save buttons accordingly.
|
||||
*/
|
||||
private void checkCreationPermissions() {
|
||||
if(SecurityUtils.isUserInRole(UserRole.ROLE_CREATE_ORDER)) {
|
||||
((Button)window.getFellowIfAny("save")).setDisabled(false);
|
||||
((Button)window.getFellowIfAny("save_and_continue")).setDisabled(false);
|
||||
}
|
||||
else {
|
||||
((Button)window.getFellowIfAny("save")).setDisabled(true);
|
||||
((Button)window.getFellowIfAny("save_and_continue")).setDisabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,12 +11,14 @@ import org.navalplanner.business.common.exceptions.ValidationException;
|
|||
import org.navalplanner.business.orders.daos.IOrderDAO;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.users.daos.IOrderAuthorizationDAO;
|
||||
import org.navalplanner.business.users.daos.IUserDAO;
|
||||
import org.navalplanner.business.users.entities.OrderAuthorization;
|
||||
import org.navalplanner.business.users.entities.OrderAuthorizationType;
|
||||
import org.navalplanner.business.users.entities.Profile;
|
||||
import org.navalplanner.business.users.entities.ProfileOrderAuthorization;
|
||||
import org.navalplanner.business.users.entities.User;
|
||||
import org.navalplanner.business.users.entities.UserOrderAuthorization;
|
||||
import org.navalplanner.web.security.SecurityUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
|
|
@ -46,6 +48,9 @@ public class OrderAuthorizationModel implements IOrderAuthorizationModel {
|
|||
@Autowired
|
||||
private IOrderDAO orderDAO;
|
||||
|
||||
@Autowired
|
||||
private IUserDAO userDAO;
|
||||
|
||||
@Override
|
||||
public List<OrderAuthorizationType> addProfileOrderAuthorization(
|
||||
Profile profile, List<OrderAuthorizationType> authorizations) {
|
||||
|
|
@ -128,29 +133,48 @@ public class OrderAuthorizationModel implements IOrderAuthorizationModel {
|
|||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void initSetOrder(Order order) {
|
||||
public void initCreate(Order order) {
|
||||
this.order = order;
|
||||
initializeLists();
|
||||
//add write authorization for current user
|
||||
try {
|
||||
User user = userDAO.findByLoginName(SecurityUtils.getSessionUserLoginName());
|
||||
UserOrderAuthorization orderAuthorization =
|
||||
createUserOrderAuthorization(order, user);
|
||||
orderAuthorization.setAuthorizationType(OrderAuthorizationType.WRITE_AUTHORIZATION);
|
||||
userOrderAuthorizationList.add(orderAuthorization);
|
||||
}
|
||||
catch(InstanceNotFoundException e) {
|
||||
//this case shouldn't happen, because it would mean that there isn't a logged user
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void initEdit(Order order) {
|
||||
this.order = order;
|
||||
initializeLists();
|
||||
//Retrieve the OrderAuthorizations associated with this order
|
||||
for(OrderAuthorization authorization : dao.listByOrder(order)) {
|
||||
forceLoadEntities(authorization);
|
||||
if(authorization instanceof UserOrderAuthorization) {
|
||||
userOrderAuthorizationList.add(
|
||||
(UserOrderAuthorization) authorization);
|
||||
}
|
||||
if(authorization instanceof ProfileOrderAuthorization) {
|
||||
profileOrderAuthorizationList.add(
|
||||
(ProfileOrderAuthorization) authorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeLists() {
|
||||
profileOrderAuthorizationList =
|
||||
new ArrayList<ProfileOrderAuthorization>();
|
||||
userOrderAuthorizationList =
|
||||
new ArrayList<UserOrderAuthorization>();
|
||||
orderAuthorizationRemovalList =
|
||||
new ArrayList<OrderAuthorization>();
|
||||
|
||||
if(!order.isNewObject()) {
|
||||
//Retrieve the OrderAuthorizations associated with this order
|
||||
for(OrderAuthorization authorization : dao.listByOrder(order)) {
|
||||
forceLoadEntities(authorization);
|
||||
if(authorization instanceof UserOrderAuthorization) {
|
||||
userOrderAuthorizationList.add(
|
||||
(UserOrderAuthorization) authorization);
|
||||
}
|
||||
if(authorization instanceof ProfileOrderAuthorization) {
|
||||
profileOrderAuthorizationList.add(
|
||||
(ProfileOrderAuthorization) authorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void forceLoadEntities(OrderAuthorization authorization) {
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@
|
|||
<column label="${i18n:_('Operations')}" align="center"/>
|
||||
</columns>
|
||||
</grid>
|
||||
<button id="show_create_form" label="${i18n:_('Create')}"
|
||||
<button id="show_create_form" label="${i18n:_('Create')}" disabled="true"
|
||||
onClick="controller.goToCreateForm()" sclass="create-button global-action" />
|
||||
<button id="create_from_template_button" label="${i18n:_('Create From Template')}" onClick="controller.createOrderFromTemplate()"
|
||||
sclass="global-action"/>
|
||||
disabled="true" sclass="global-action"/>
|
||||
</window>
|
||||
Loading…
Add table
Reference in a new issue