@Override public void fill(Uebergabeblatt bbzr, Collection<FetchPlan> plans) { if (log.isDebugEnabled()) log.debug("Entering BbzrServiceImpl:fill()"); if (plans.contains(FetchPlan.BBZR_HEADER) || plans.contains(FetchPlan.UEB_HEADER_SENDER) || plans.contains(FetchPlan.UEB_HEADER_EMPFAENGER)) { Hibernate.initialize(bbzr.getHeader()); if (plans.contains(FetchPlan.UEB_HEADER_SENDER) && bbzr.getHeader() != null) Hibernate.initialize(bbzr.getHeader().getSender()); if (plans.contains(FetchPlan.UEB_HEADER_EMPFAENGER) && bbzr.getHeader() != null) { Header h = bbzr.getHeader(); Hibernate.initialize(h.getEmpfaenger()); } } if (plans.contains(FetchPlan.BBZR_BAUMASSNAHMEN)) { Hibernate.initialize(bbzr.getMassnahmen()); for (Massnahme m : bbzr.getMassnahmen()) { if (m == null) continue; if (plans.contains(FetchPlan.ZVF_MN_VERSION)) { Hibernate.initialize(m.getVersion()); } if (plans.contains(FetchPlan.ZVF_MN_STRECKEN)) { Hibernate.initialize(m.getStrecke()); if (plans.contains(FetchPlan.ZVF_MN_STRECKE_STRECKEVZG)) { StreckeService streckeService = EasyServiceFactory.getInstance().createStreckeService(); streckeService.fill(m.getStrecke(), plans); } } if (plans.contains(FetchPlan.ZVF_MN_BBPSTRECKE)) { Hibernate.initialize(m.getBbp()); } if (plans.contains(FetchPlan.ZVF_MN_ALLG_REGELUNGEN)) { Hibernate.initialize(m.getAllgregelungen()); } if (plans.contains(FetchPlan.BBZR_MN_ZUEGE)) { Hibernate.initialize(m.getZug()); if (m.getZug() != null) { // uebergabeblattspezifische fetchplans entfernen FetchPlan[] newFetchPlans = new FetchPlan[0]; List<FetchPlan> newPlans = new ArrayList<FetchPlan>(plans); newPlans.remove(FetchPlan.UEB_MN_ZUEGE); newPlans.remove(FetchPlan.UEB_KNOTENZEITEN); newPlans.remove(FetchPlan.UEB_BEARBEITUNGSSTATUS); newFetchPlans = newPlans.toArray(newFetchPlans); ZugService zugService = EasyServiceFactory.getInstance().createZugService(); zugService.fill(m.getZug(), newFetchPlans); } } } } }
@SuppressWarnings("unchecked") /* * Gibt ACCESS_GRANTED zurueck, wenn der Benutzer eine Rolle hat, die ihm eine der * requestedAuthorizations auf die Baumassnahme erlaubt. * * <pre> requested: baumassnahme_bewerten, granted: baumassnahme_bewerten_alle oder * baumassnahme_bewerten_region, wenn die Region dem Benutzer zugeordnet ist </pre> */ public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config) { int result = ACCESS_DENIED; User user = UserServiceImpl.getCurrentApplicationUser(); Uebergabeblatt zvf = (Uebergabeblatt) object; Iterator iter = config.getConfigAttributes(); while (iter.hasNext()) { // Schleife über erforderliche Berechtigungen ConfigAttribute attribute = (ConfigAttribute) iter.next(); if (supports(attribute)) { GrantedAuthority[] authorities = authentication.getAuthorities(); // Schleife über vorhandene Berechtigungen for (int i = 0; i < authorities.length; i++) { if (authorities[i].getAuthority().startsWith(attribute.getAttribute())) { if (logger.isDebugEnabled()) logger.debug(String.format("Found authority %s", authorities[i])); // Zentral if (authorities[i].getAuthority().endsWith("_ALLE")) result = ACCESS_GRANTED; // Regional else if (authorities[i].getAuthority().endsWith("_REGIONALBEREICH")) { if (attribute.getAttribute().startsWith("ROLE_BBZR_ANLEGEN")) { result = ACCESS_GRANTED; } else if (user.getRegionalbereich() != null) { // MasterRB try { String masterRB = zvf.getMassnahmen().iterator().next().getMasterniederlassung().substring(3); if (user.getRegionalbereich().getName().equalsIgnoreCase(masterRB)) result = ACCESS_GRANTED; } catch (NoSuchElementException e) { } } } if (result == ACCESS_GRANTED) break; } } } } return result; }
@Override protected ActionForward run( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (log.isDebugEnabled()) log.debug("Entering TopProjektListAction."); TqmUser secUser = getSecUser(); // Rechtepruefung if (!secUser.hasAuthorization("ROLE_TOPPROJEKT_LESEN_ALLE") && !secUser.hasAuthorization("ROLE_TOPPROJEKT_LESEN_REGIONALBEREICH")) return mapping.findForward("ACCESS_DENIED"); TopProjektFilterForm filterForm = (TopProjektFilterForm) form; if (request.getParameter("reset") != null) { filterForm.reset(); } Integer listPageNumber = FrontendHelper.castStringToInteger(request.getParameter("page")); if (listPageNumber == null) listPageNumber = 1; Integer count = PaginatedList.LIST_OBJECTS_PER_PAGE; Integer start = (listPageNumber - 1) * count; if (request.getParameter(TableTagParameters.PARAMETER_EXPORTING) != null) { count = null; start = null; } // /////////////// // Sorting String listSortColumn = null; SortOrderEnum listSortOrder = null; if (FrontendHelper.stringNotNullOrEmpty(request.getParameter("sort"))) { // Sortierkriterium aus Request verwenden, wenn vorhanden listSortColumn = request.getParameter("sort"); } if ("asc".equalsIgnoreCase(request.getParameter("dir"))) { listSortOrder = SortOrderEnum.ASCENDING; } else if ("desc".equalsIgnoreCase(request.getParameter("dir"))) { listSortOrder = SortOrderEnum.DESCENDING; } // Sortierparameter anpassen if (listSortColumn == null) { listSortColumn = "name"; listSortOrder = SortOrderEnum.ASCENDING; } List<Order> sortOrders = new LinkedList<Order>(); if (listSortOrder != null) { if (listSortOrder == SortOrderEnum.ASCENDING) { sortOrders.add(Order.asc(listSortColumn)); } else if (listSortOrder == SortOrderEnum.DESCENDING) { sortOrders.add(Order.desc(listSortColumn)); } } // ///////////////////////// Map<String, Object> searchCriteria = new HashMap<String, Object>(); if (filterForm.getSapProjektNummer() != null) { searchCriteria.put(TopProjektService.SAP_NUMMER, filterForm.getSapProjektNummer()); } PaginatedList<TopProjekt> projekte = serviceFactory .createTopProjektService() .findPaginatedBySort( sortOrders, searchCriteria, start, count, new Preload[] {new Preload(TopProjekt.class, "regionalbereich")}, sessionFahrplanjahr); projekte.setObjectsPerPage(PaginatedList.LIST_OBJECTS_PER_PAGE); projekte.setPageNumber(listPageNumber); projekte.setSortDirection(listSortOrder); if (FrontendHelper.stringNotNullOrEmpty(listSortColumn)) { projekte.setSortCriterion(listSortColumn); request.setAttribute("sort", listSortColumn); } // Sortierung als Parameter zurückgeben, weil Displaytag die Methode // baumassnahmeList.getSortDirection nicht korrekt auswertet if (listSortOrder == SortOrderEnum.ASCENDING) { request.setAttribute("dir", "asc"); } else if (listSortOrder == SortOrderEnum.DESCENDING) { request.setAttribute("dir", "desc"); } request.setAttribute("projekte", projekte); Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); SimpleDateFormat dateFormatToCompare = new SimpleDateFormat("yyyy.MM.dd"); String datumVonToCompare = null; String datumBisToCompare = null; if (FrontendHelper.castStringToDate(request.getParameter("datumBis")) != null) { filterForm.setDatumBis( dateFormat.format(FrontendHelper.castStringToDate(request.getParameter("datumBis")))); datumBisToCompare = dateFormatToCompare.format( FrontendHelper.castStringToDate(request.getParameter("datumBis"))); } else if (filterForm.getDatumBis() != null) { datumBisToCompare = dateFormatToCompare.format(FrontendHelper.castStringToDate(filterForm.getDatumBis())); filterForm.setDatumBis(filterForm.getDatumBis()); } else { filterForm.setDatumBis(dateFormat.format(cal.getTime())); datumBisToCompare = dateFormatToCompare.format(cal.getTime()); } if (FrontendHelper.castStringToDate(request.getParameter("datumVon")) != null) { filterForm.setDatumVon( dateFormat.format(FrontendHelper.castStringToDate(request.getParameter("datumVon")))); datumVonToCompare = dateFormatToCompare.format( FrontendHelper.castStringToDate(request.getParameter("datumVon"))); } else if (filterForm.getDatumVon() != null) { datumVonToCompare = dateFormatToCompare.format(FrontendHelper.castStringToDate(filterForm.getDatumVon())); filterForm.setDatumVon(filterForm.getDatumVon()); } else { cal.add(Calendar.DAY_OF_MONTH, -7); filterForm.setDatumVon(dateFormat.format(cal.getTime())); datumVonToCompare = dateFormatToCompare.format(cal.getTime()); } request.setAttribute("datumVonToCompare", datumVonToCompare); request.setAttribute("datumBisToCompare", datumBisToCompare); return mapping.findForward("SUCCESS"); }
/** * Voter, der abstimmt, ob ein Benutzer Zugriffsrechte auf eine Baumassnahme hat. * * @author Sebastian Hennebrueder */ public class BBZRAnyVoter implements EasyAccessDecisionVoter { Logger logger = Logger.getLogger(BBZRAnyVoter.class); public boolean supports(ConfigAttribute attribute) { // currently accept all kind of authorizations return true; } @SuppressWarnings("unchecked") public boolean supports(Class clazz) { return clazz == Uebergabeblatt.class; } @SuppressWarnings("unchecked") /* * Gibt ACCESS_GRANTED zurueck, wenn der Benutzer eine Rolle hat, die ihm eine der * requestedAuthorizations auf die Baumassnahme erlaubt. * * <pre> requested: baumassnahme_bewerten, granted: baumassnahme_bewerten_alle oder * baumassnahme_bewerten_region, wenn die Region dem Benutzer zugeordnet ist </pre> */ public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config) { int result = ACCESS_DENIED; User user = UserServiceImpl.getCurrentApplicationUser(); Uebergabeblatt zvf = (Uebergabeblatt) object; Iterator iter = config.getConfigAttributes(); while (iter.hasNext()) { // Schleife über erforderliche Berechtigungen ConfigAttribute attribute = (ConfigAttribute) iter.next(); if (supports(attribute)) { GrantedAuthority[] authorities = authentication.getAuthorities(); // Schleife über vorhandene Berechtigungen for (int i = 0; i < authorities.length; i++) { if (authorities[i].getAuthority().startsWith(attribute.getAttribute())) { if (logger.isDebugEnabled()) logger.debug(String.format("Found authority %s", authorities[i])); // Zentral if (authorities[i].getAuthority().endsWith("_ALLE")) result = ACCESS_GRANTED; // Regional else if (authorities[i].getAuthority().endsWith("_REGIONALBEREICH")) { if (attribute.getAttribute().startsWith("ROLE_BBZR_ANLEGEN")) { result = ACCESS_GRANTED; } else if (user.getRegionalbereich() != null) { // MasterRB try { String masterRB = zvf.getMassnahmen().iterator().next().getMasterniederlassung().substring(3); if (user.getRegionalbereich().getName().equalsIgnoreCase(masterRB)) result = ACCESS_GRANTED; } catch (NoSuchElementException e) { } } } if (result == ACCESS_GRANTED) break; } } } } return result; } /** * Gibt ACCESS_GRANTED zurueck, wenn der Benutzer eine Rolle hat, die ihm eine der * requestedAuthorizations auf die Baumassnahme erlaubt. * * <pre> * requested: baumassnahme_bewerten, granted: baumassnahme_bewerten_alle oder baumassnahme_bewerten_region, wenn die Region dem Benutzer zugeordnet ist * </pre> * * @param tqmUser * @param domainObject - sollte eine Baumassnahme sein * @param requestedAuthorizations * @return */ public int vote(final TqmUser tqmUser, Object domainObject, String requestedAuthorizations) { Authentication authentication = new Authentication() { private static final long serialVersionUID = 6602266556656215575L; public GrantedAuthority[] getAuthorities() { return tqmUser.getAuthorities(); } public Object getCredentials() { return null; } public Object getDetails() { return tqmUser; } public Object getPrincipal() { return tqmUser; } public boolean isAuthenticated() { return true; } public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {} public String getName() { return tqmUser.getUsername(); } }; String[] splits = requestedAuthorizations.split(","); ConfigAttributeDefinition definition = new ConfigAttributeDefinition(); for (String singleAuthorization : splits) { definition.addConfigAttribute(new SecurityConfig(singleAuthorization.trim())); } return vote(authentication, domainObject, definition); } }