evandrojr / Ombudsman

Copy of the official ombudsman software used and created by the Brazilian government

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Melhoria na gestão de acesso às telas

flaviogranato opened this issue · comments

Vi que não utilizamos nenhum mecanismo que faça estas validações por nós.
Acredito muito no potencial do Shiro ( http://shiro.apache.org/index.html )
Acho ele muito fácil e prático de ser implementado, mesmo utilizando alguma forma de validação customizada de usuários.

Ótima ideia! Ele tem um sistema de validação similar ao framework Yii do PHP? Este é excelente!

A validação é simples de implementar e bastante poderosa.

Faça o tutorial de GitHub do site e manda o que você for fazendo.

Já utilizo em um projeto meu. Ainda terei que ver como colocar no sistema, mas acho que já vai dar pra ter uma idéia.
Outra coisa, ele é aderente ao JAAS da Oracle, logo se bem implementado pode passar facilmente em uma auditoria de segurança. Aliás é outro ponto que vou abrir issues... hehehehe

public class MyRealm extends AuthorizingRealm {

private static final Logger logger = Logger.getLogger( MyRealm.class );
@Inject
protected UsuarioController usuarioController;

public MyRealm() {
    setName( "MyRealm" );
    setCredentialsMatcher( new AllowAllCredentialsMatcher() );
}

@Override
protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken authcToken ) throws AuthenticationException {
    UsernamePasswordToken token = ( UsernamePasswordToken ) authcToken;
    Usuario usuarioBanco;
    try {
        usuarioBanco = usuarioController.findByLogin( new Usuario( token.getUsername(), token.getPassword().toString() ) );
        if ( usuarioBanco != null && CriptoUtil.verificar( new String( token.getPassword() ), usuarioBanco.getSenha() ) ) {
            return new SimpleAuthenticationInfo( usuarioBanco, usuarioBanco.getSenha(), getName() );
        } else {
            return null;
        }
    } catch ( Exception ex ) {
        logger.error( ex );
    }

    return null;
}

@Override
protected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection principals ) {

    Usuario usuario = ( Usuario ) principals.fromRealm( getName() ).iterator().next();
    List<Grupo> grupos = null;

    try {
        grupos = usuarioController.findGroupsById( usuario.getCodigo() );
    } catch ( Exception ex ) {
        logger.error( ex );
    }

    if ( grupos != null ) {
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); // Allow member to edit themselves 
        //info.addStringPermission( "member:edit:" + codigoUsuario );
        for ( Grupo role : grupos ) {
            info.addRole( role.getNome() );
        }

        return info;
    } else {
        return null;
    }
}

}