sábado, 27 de setembro de 2014

Campos customizados para autenticação com Laravel 4.2

Olá galera,

O Laravel, por padrão, utiliza os campos username e password para autenticação. Dessa forma, nós podemos utilizar o método Auth::attempt sem que seja necessário fazer nenhuma alteração.

Agora supondo que a nossa tabela utilize campos como email e senha, quais alterações precisam ser feitas para que o método Auth::attempt passe a funcionar?

A primeira delas deve ser feita no seu model de usuário, onde é implementado o método getAuthPassword com o meu atributo.

    public function getAuthPassword()
    {
       return $this->senha;
    }
  

Abaixo eu implementei um método, no controller de usuário, chamado validate que será chamado quando um formulário de login foi submetido.

    public function validate()
    {
       $user = array(
            'email' => Input::get('email'),
            'password' => Input::get('senha'),
            'ativo' => 1
        );

        if (Auth::attempt($user, false)) {
            echo 'Logado com sucesso!';
        } else {
            echo 'Não foi possível efetuar o login.';
        }
    }
  

Note que o segredo está no campo da senha. A chave que eu utilizo no array tem que ser exatamente password. Os demais parâmetros terão que ser o nome dos nossos campos na tabela de usuários. Inclusive podem ser passados vários atributos para serem validados como foi o caso do ativo.

Fica aí a dica. Grande abraço

segunda-feira, 8 de setembro de 2014

Trabalhando com Openlayers e Mapserver no Windows

Olá galera,

Esse post é atendendo a solicitação de uma leitora aqui do blog, nossa amiga Fernanda Franciele. Não vou entrar em muitos detalhes sobre os códigos porque não é o foco. Quem tiver interesse em saber mais, pode ler o post Criando e exibindo um WMS com MapServer, PostGIS e Openlayer.

Vamos começar com a instalação do MS4W. Faça o download do instalador ms4w-3.0.6-setup.exe no link http://www.maptools.org/ms4w/index.phtml?page=downloads.html e instale conforme as telas abaixo.

Após a instalação, adicionaremos a projeção do Google que não vem por padrão. Abra o arquivo epsg com o bloco de notas que se encontra no diretório abaixo.

Inclua o código abaixo na última linha.

# Google Maps
<900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs <>

Abaixo segue a organização dos arquivos criados no MS4W.

Você pode fazer o download do arquivo utilizado AQUI. A diferença dele pra o post Criando e exibindo um WMS com MapServer, PostGIS e Openlayer é que estou utilizando um shapefile ao invés do banco e não estou utilizando labels no mapa.

O resultado final deve ter ficado como abaixo.

Espero ter ajudado aos usuários que trabalham com o Windows.

Grande abraço a todos.

domingo, 7 de setembro de 2014

Trabalhando com mutators no Laravel 4.2

Olá galera,

O Eloquent fornece um forma de modificar os atributos do model. Para exemplificar seu uso, vamos analisar o UsuariosController.php da série Autenticação e ACL com Laravel 4.1.

Nos métodos que salvam e atualizam os dados do usuário, o hash da senha é feito manualmente antes de salvá-la no banco de dados.

$input['password'] = Hash::make(Input::get('password'));

Utilizando mutator, nós podemos remover essa "transformação" e criar um método no model Usuario.php.

    public function setPasswordAttribute($value) {
    $this->attributes['password'] = Hash::make($value);
    }
  

A partir de agora quando for atualizar ou inserir uma senha no banco o hash dela será feito automaticamente.

Vale lembrar que o nome do método deve seguir o padrão setNomedoatributoAttribute

Fica aí a dica. Grande abraço

segunda-feira, 1 de setembro de 2014

Exibindo menu de acordo com o perfil

Olá galera,

Após receber inúmeras solicitações, vou mostrar como exibir somente itens do menu que o usuário tem permissão.

Recomendo que você dê uma olhada nos comentários do post Autenticação e ACL com Laravel 4.1 - Final para saber do que estamos falando.

Tomando como base os códigos da série Autenticação e ACL com Laravel 4.1, abra o arquivo app/macros.php e adicione a macro abaixo.

    HTML::macro('mountMenu', function() {
      $menu = null;
      $cache = Cache::get('actions' . Auth::user()->id);
      $index = preg_grep('/index|\*/', $cache);

      $links = array(
        'veiculo' => 'Veículos',
        'usuario' => 'Usuários',
        'perfil' => 'Perfis',
      );

      foreach($links as $key => $value) {
        foreach($index as $i) {
          if($key == current(explode('.', $i)) || $i == '*')
            $menu .= '
  • ' . link_to($key, $value) . '
  • '; } } return $menu; });

    Já no arquivo app/views/partials/_navigation.blade.php, remova as tags 'li' que contém os links do menu e adicione {{ HTML::mountMenu() }}

    Explicando a macro que gera o menu.

    Linha 3: Recuperando as permissões do usuário logado

    Linha 4: Retorno as entradas do array de acordo com o padrão que pode ser o 'index' ou '*'

    Linhas 6 a 10: Array de itens do menu com chave e valor, sendo que a chave é minha rota e o valor é o label a ser exibido.

    Linhas 12 a 14: Percorro os dois arrays comparando se as chaves são iguais

    Linha 15: Concateno os itens de menu que atendem a minha condição

    Bastante simples não é verdade? Fica aí a dica.

    Um grande abraço e até a próxima.