[Middlewares - Laravel 9] - Como adicionar um middleware a apenas algumas rotas?
Pessoal, queria saber como adicionar um middleware a rotas específicas, mas existe um porém, são rotas criadas a partir do padrão CRUD do laravel, o Route::resource
, confira:
Route::resource("user", UserController::class)->middleware('check.if.admin');
Quero saber como adiciono esse middleware a apenas algumas rotas, ex: create
, store
, destroy
Sim é possivel fazer isso.
Docs - Documentação
Exemplo:
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('log')->only('index'); // Aplica apenas para o método index
$this->middleware('subscribed')->except('store'); // Aplica para todos, menos para o store
}
}
Ótimo amigo, fiz segundo a sua abordagem e consegui! Obrigado pela ajuda!
Você pode criar as rotas separadamente sem usar o resource e agrupá-las para adicionar o middleware de uma vez só. Não sei se tem um método de middleware para somente algumas rotas usando resources.
Se for algo do tipo de permissão, aí você pode usar as policies ou gates no lugar do middleware.
Essas abordagens são mais "corretas" para o meu objetivo? Estou realmente tentando implementar restrições a algumas feats da minha aplicação. Como sou iniciante no laravel, não sei como várias coisas são abordadas no ecosistema.
Sim, os Gates e as Policies são muito utilizados para toda a parte de ACL/controle de acesso e permissões.
Você pode implementar o seu próprio controle de permissões com eles, ou utilizar pacotes já prontos como o Laravel Permission da Spatie.
Se for definir apenas com base em o usuário ser admin ou não, uma policie vai ser mais simples de usar.
Se for ter um lugar onde você consegue definir pra cada usuário quais permissões ele terá, aí os Gates vão te dar mais liberdade pra fazer isso.
Vou ver mais sobre, muito obrigado pela dica!
Ou faz isso aqui [https://laracasts.com/discuss/channels/laravel/except-method-from-middleware-in-route](https://laracasts.com/discuss/channels/laravel/except-method-from-middleware-in-route)