diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java index 802ab1c18..a20f1da47 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java @@ -59,11 +59,20 @@ public interface IOrderDAO extends IGenericDAO { List getTasksByOrder(Order order); /** - * Returns a list of orders filtered by the authorizations of the indicated + * Returns a list of orders filtered by the read authorizations of the indicated + * user. Write authorizations are also counted, because they implicitly suppose + * read access. + * @param user User. + * @return Filtered list of orders. + */ + List getOrdersByReadAuthorization(User user); + + /** + * Returns a list of orders filtered by the write authorizations of the indicated * user. * @param user User. * @return Filtered list of orders. */ - List getOrdersByAuthorization(User user); + List getOrdersByWriteAuthorization(User user); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java index e8682f8d6..c00e6d41b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java @@ -186,7 +186,7 @@ public class OrderDAO extends GenericDAOHibernate implements } @Override - public List getOrdersByAuthorization(User user) { + public List getOrdersByReadAuthorization(User user) { if (user.getRoles().contains(UserRole.ROLE_READ_ALL_ORDERS) || user.getRoles().contains(UserRole.ROLE_EDIT_ALL_ORDERS)) { return getOrders(); @@ -209,4 +209,25 @@ public class OrderDAO extends GenericDAOHibernate implements } } + @Override + public List getOrdersByWriteAuthorization(User user) { + if (user.getRoles().contains(UserRole.ROLE_EDIT_ALL_ORDERS)) { + return getOrders(); + } + else { + List orders = new ArrayList(); + List authorizations = orderAuthorizationDAO.listByUserAndItsProfiles(user); + for(OrderAuthorization authorization : authorizations) { + if (authorization.getAuthorizationType() == OrderAuthorizationType.WRITE_AUTHORIZATION) { + Order order = authorization.getOrder(); + if(!orders.contains(order)) { + order.getName(); //this lines forces the load of the basic attributes of the order + orders.add(order); + } + } + } + return orders; + } + } + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java index 350176166..b8a70c654 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderModel.java @@ -197,7 +197,7 @@ public class OrderModel implements IOrderModel { //anyway, if it happenned we return an empty list return new ArrayList(); } - List orders = orderDAO.getOrdersByAuthorization(user); + List orders = orderDAO.getOrdersByReadAuthorization(user); initializeOrders(orders); return orders; } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java index 10f8b0f08..a68dbbfdb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/company/CompanyPlanningModel.java @@ -533,7 +533,7 @@ public abstract class CompanyPlanningModel implements ICompanyPlanningModel { //anyway, if it happenned we return an empty list return result; } - List list = orderDAO.getOrdersByAuthorization(user); + List list = orderDAO.getOrdersByReadAuthorization(user); for (Order order : list) { TaskGroup associatedTaskElement = order.getAssociatedTaskElement(); if (associatedTaskElement != null) {