Package br.gov.serpro.ouvidoria.controller

Source Code of br.gov.serpro.ouvidoria.controller.ControleAcessoCtrl

/*
* Sistema de Ouvidoria: um canal através do qual os usuários
* podem encaminhar suas reclamações, elogios e sugestões.
*
* Copyright (C) 2011 SERPRO
*
* Este programa é software livre; você pode redistribuí-lo e/ou
* modificá-lo sob os termos da Licença Pública Geral GNU, conforme
* publicada pela Free Software Foundation; tanto a versão 2 da
* Licença como (a seu critério) qualquer versão mais nova.
*
* Este programa é distribuído na expectativa de ser útil, mas SEM
* QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM
* PARTICULAR. Consulte a Licença Pública Geral GNU para obter mais
* detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU,
* sob o título "LICENCA.txt", junto com esse programa. Se não,
* acesse o Portal do Software Público Brasileiro no endereço
* http://www.softwarepublico.gov.br/ ou escreva para a Fundação do
* Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
* MA 02111-1301, USA.
*
* Contatos através do seguinte endereço internet:
* http://www.serpro.gov.br/sistemaouvidoria/
*/
package br.gov.serpro.ouvidoria.controller;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;

import br.gov.serpro.ouvidoria.dao.Dao;
import br.gov.serpro.ouvidoria.dao.DaoException;
import br.gov.serpro.ouvidoria.dao.DaoFactory;
import br.gov.serpro.ouvidoria.model.Funcionalidade;
import br.gov.serpro.ouvidoria.model.Funcionario;
import br.gov.serpro.ouvidoria.model.Orgao;
import br.gov.serpro.ouvidoria.model.Perfil;

/**
* ControleAcessoCtrl
*
* Objetivo: Fornecer um ponto centralizado do controle de acesso da aplicação.
*
* @author SERPRO
* @version $Revision: 1.1.2.3 $, $Date: 2011/10/19 18:18:09 $
* @version 0.1, Date: 2004/12/13
*/
public class ControleAcessoCtrl {

  /* Constantes para controle de acesso */
  public static final int CA_ACESSO_PERMITIDO = 0;

  public static final int CA_ACESSO_NEGADO = 1;

  public static final int CA_NECESSARIO_LOGIN = 2;

  /* Constantes para controle de vigência */
  public static final int VG_ACESSO_PERMITIDO = CA_ACESSO_PERMITIDO;

  public static final int VG_FORA_PERIODO_ACIONAMENTO = 11;

  public static final int VG_FORA_PERIODO_CONSULTA_RESPOSTA = 12;

  public static final int VG_FORA_PERIODO_OPERACAO = 13;

  private final Dao funcionalidadeDao;

  /**
   * Construtor recebendo objeto Dao
   *
   * @param daoFactory
   */
  public ControleAcessoCtrl(DaoFactory daoFactory) {
    funcionalidadeDao = daoFactory.create(Funcionalidade.class);
  }

  /**
   * Verifica se o Funcionário atua em um determinado Órgão
   *
   * @param orgao
   * @param funcionario
   * @return
   */
  public static int permiteGerencia(final Orgao orgao,
      final Funcionario funcionario) {

    /* se sou o administrador, tenho acesso a tudo */
    if (funcionario.getPerfil().equals(Perfil.ADMINISTRADOR)) {
      return ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
    }

    final Timestamp now = new Timestamp(System.currentTimeMillis());

    /* se não sou administrador e não estou no período de operação */
    if (!(orgao.getDataInicioOperacao().before(now) && orgao
        .getDataFimOperacao().after(now))) {
      return ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO;
    }

    /* verifico o acesso ao órgão */
    if (funcionario.getListaInstituicao() == null
        || funcionario.getListaInstituicao().isEmpty()) {
      return ControleAcessoCtrl.CA_ACESSO_NEGADO;
    }
    if (funcionario.getListaInstituicao().contains(orgao)) {
      return ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
    }

    /* verifico o acesso aos sub-órgãos */
    if (orgao.getListaSubOrgao() == null
        || orgao.getListaSubOrgao().isEmpty()) {
      return ControleAcessoCtrl.CA_ACESSO_NEGADO;
    }

    for (Iterator iter = orgao.getListaSubOrgao().iterator(); iter
        .hasNext();) {
      if (funcionario.getListaInstituicao().contains(iter.next())) {
        return ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
      }
    }

    return ControleAcessoCtrl.CA_ACESSO_NEGADO;
  }

  /**
   * Verifica se o Funcionário tem acesso a uma determinada Funcionalidade
   *
   * @param orgao
   * @param funcionario
   * @param role
   * @return int Valores possíveis de retorno <br>
   *         0 - Acesso permitido <br>
   *         1 - Acesso negado <br>
   *         2 - Necessário efetuar login 13 - Fora do período de Operação
   * @throws DaoException
   */
  public int permiteAcesso(final Orgao orgao, final Funcionario funcionario,
      final ArrayList regras) throws DaoException {

    if (orgao == null) {
      throw new NullPointerException();
    }

    if (regras == null || regras.size() == 0) {
      return ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
    }

    int controle = ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
    int totalControle = 0;

    Iterator itRegras = regras.iterator();

    while (itRegras.hasNext()) {

      String role = (String) itRegras.next();

      Funcionalidade funcionalidade = (Funcionalidade) funcionalidadeDao
          .get(new Long(role));

      if (funcionalidade == null) {
        controle += ControleAcessoCtrl.CA_ACESSO_NEGADO;
        continue;
      }

      if (funcionalidade.getNecessarioLogin() == null
          || funcionalidade.getNecessarioLogin().booleanValue()) {

        if (funcionario == null) {
          controle += ControleAcessoCtrl.CA_NECESSARIO_LOGIN;
          continue;

        } else {

          final int permiteGerencia = permiteGerencia(orgao,
              funcionario);

          if (permiteGerencia != ControleAcessoCtrl.CA_ACESSO_PERMITIDO) {
            controle += permiteGerencia;

            if (permiteGerencia > 0) {
              continue;
            }

          } else if (funcionario.getListaFuncionalidade().contains(
              funcionalidade)) {
            controle += ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
          } else {
            controle += ControleAcessoCtrl.CA_ACESSO_NEGADO;
          }
        }
      }

      totalControle += controle + 1;
    }

    if (totalControle <= controle) {
      return controle;
    } else {
      return ControleAcessoCtrl.CA_ACESSO_PERMITIDO;
    }
  }

  /**
   * Verifica se órgão está dentro de seus períodos de vigência
   *
   * @param orgao
   * @param role
   * @return int Valores possíveis de retorno <br>
   *         0 - Período de Vigência OK <br>
   *         1 - Fora do Período de Cadastramento <br>
   *         2 - Fora do Período de Consulta Resposta
   * @throws DaoException
   */
  public int verificaVigenciaOrgao(final Orgao orgao, final String role) {

    if (orgao == null) {
      throw new NullPointerException();
    }

    if (role == null || role.trim().length() == 0) {
      return ControleAcessoCtrl.VG_ACESSO_PERMITIDO;
    }

    final Timestamp now = new Timestamp(System.currentTimeMillis());

    /* Funcionalidade: EnviarMensagemWeb */
    if ("32".equals(role)) {

      if (!(orgao.getDataInicioAcionamento().before(now) && orgao
          .getDataFimAcionamento().after(now))) {
        return ControleAcessoCtrl.VG_FORA_PERIODO_ACIONAMENTO;
      }
    }

    /* Funcionalidade: ConsultarResposta */
    if ("1".equals(role)) {

      if (!(orgao.getDataInicioConsultaResposta().before(now) && orgao
          .getDataFimConsultaResposta().after(now))) {
        return ControleAcessoCtrl.VG_FORA_PERIODO_CONSULTA_RESPOSTA;
      }
    }

    /* Funcionalidade: Login */
    if ("2".equals(role)) {

      if (orgao.getDataInicioCadastramento().before(now)
          && orgao.getDataFimCadastramento().after(now)) {
        return ControleAcessoCtrl.VG_ACESSO_PERMITIDO;
      }

      if (!(orgao.getDataInicioOperacao().before(now) && orgao
          .getDataFimOperacao().after(now))) {
        return ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO;
      }
    }

    return ControleAcessoCtrl.VG_ACESSO_PERMITIDO;
  }

  public boolean acessoFuncionalidade(Funcionario funcionario,
      Funcionalidade funcionalidade) {

    if (funcionario.getListaFuncionalidade().contains(funcionalidade)) {
      return true;
    }

    return false;
  }
}
TOP

Related Classes of br.gov.serpro.ouvidoria.controller.ControleAcessoCtrl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.