1
resposta

Permissões usando Middleware

Na aula de "Autenticação e segurança" fala sobre usar o middleware para verificar se estou logado.

No Kernel, o $middleware executa em todas as requisições e o $routeMiddleware em especificas, certo.

Minha dúvida é, no caso de um painel (admin) onde eu tenho que estar logado para acessar o conteúdo e também quero que certas ações não estejam disponíveis para certos níveis de acesso.

Usaria no $middleware para sempre testar se estou logado?

protected $middleware = [
  // outros registros omitidos
  'estoque\Http\Middleware\AutorizacaoMiddleware',
];

E no controller eu colocaria outro para verificar se posso ou não ter acesso ao adicionar e remover?

public function __construct()
{
    $this->middleware('middleware-que-testa-permissao-de-acesso', 
        ['only' => ['adiciona', 'remove']]);
}

Outra dúvida é como eu poderia nessa verificação do middleware, registrar o resultado "Pode ver ou não" para ser acessado na view, assim posso fazer um if para desabilitar o botão adicionar e remover, ou esconder um link de um menu por exemplo, que a pessoa não tem permissão para ver.

1 resposta

Oi Max, tudo bom?

Acredito que nesse ponto, seja legal você dar uma olhada em filtros com laravel. Com o filtro você pode verificar a permissão do usuario antes de certas rotas e pode configurar quais rotas vão ser filtradas no proprio arquivo routes.php =)

Algo como:

// filters.php
Route::filter('role', function()
{ 
  if ( Auth::user()->role !==1) {
     // alguma regra de negocio
     return Redirect::to('/'); 
   }
}); 

// routes.php
 Route::group(array('before' => 'role'), function() {
           // suas rotas que precisam ser filtradas pela permissão
});

A partir do laravel 5.1 você também tem o Auth Service Provider que também traz algumas helpers pro twig, como o can:

@can('update', $post)
    <!-- The Current User Can Update The Post -->
@endcan

Que deixa a coisa um pouco mais semantica, evitando um monte de ifs =)

Qualquer problema é só falar.

Abraço