/** * Gibt ACCESS_DENIED zurueck, wenn der Benutzer eine Rolle hat, die ihm eine der * requestedAuthorizations auf den Regionalbereich erlaubt. * * @param tqmUser * @param domainObject Objekt der Klasse Regionalbereich * @param requestedAuthorizations * @return */ public int vote(final TqmUser tqmUser, Object domainObject, String requestedAuthorizations) { Authentication authentication = new Authentication() { private static final long serialVersionUID = 3734932700281423324L; 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); }
protected Object mapRow(ResultSet rs, int rownum) throws SQLException { logger.debug("抽取webresdb中的记录........."); RdbmsEntryHolder rsh = new RdbmsEntryHolder(); // 设置受保护业务 rsh.setMethodName(rs.getString("protect").trim()); // 设置角色 rsh.setRoles(rs.getString("roles").trim()); // 属于哪个项目类别 rsh.setOwner(rs.getString("owner").trim()); // 设置描述 rsh.setRemark(rs.getString("remark").trim()); ConfigAttributeDefinition cad = new ConfigAttributeDefinition(); String[] tokens = StringUtils.commaDelimitedListToStringArray(rs.getString("roles").trim()); for (int i = 0; i < tokens.length; ++i) cad.addConfigAttribute(new SecurityConfig(tokens[i])); // 设置角色集合 rsh.setCad(cad); return rsh; }
@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; }