/**
   * 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;
  }
Example #3
0
  @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;
  }