Middleware Laravel com várias funções
Estou com alguns problemas com o middleware do Laravel. Deixe-me contar a idéia básica do que estou tentando realizar:
Os usuários registrados no site terão uma das quatro funções:
Aluno (padrão): pode acessar "índice'e'mostrar' VisualizaçõesAprovador: pode acessar os itens anteriores maisvisão global','atualizar'Editor: pode acessar o anterior, mais 'crio','editar'e'loja'Admin: pode acessartudofyi: 'visão geral' é uma espécie de visualização de índice, mas apenas para a função de aprovador e superior
O que vocês sugerem é a melhor maneira de fazer isso? Isto é o que eu fiz até agora, mas não parece funcionar:
Kernel.php
protected $middlewareGroups = [
...
'approver+' => [
\App\Http\Middleware\Approver::class,
\App\Http\Middleware\Editor::class,
\App\Http\Middleware\Admin::class,
],
];
protected $routeMiddleware = [
...
'student' => \App\Http\Middleware\Student::class,
'approver' => \App\Http\Middleware\Approver::class,
'editor' => \App\Http\Middleware\Editor::class,
'admin' => \App\Http\Middleware\Admin::class,
];
Http \ Middleware \ Admin.php
public function handle($request, Closure $next)
{
if (Auth::check())
{
if(Auth::user()->isAdmin())
{
return $next($request);
}
}
return redirect('login');
}
O modelo eloquente 'Usuário':
public function isAdmin()
{
if($this->role_id === 4)
{
return true;
}
else
{
return false;
}
}
Fiz exatamente o mesmo nos arquivos de middleware do Aprovador e Editor e nas funções isApprover e isEditor no modelo Usuário, editamos apenas o valor verificado na instrução if para 2 e 3, respectivamente.
Finalmente, aqui está o que eu fiz no meu arquivo routes \ web:
Route::get('scholen', 'SchoolsController@index');
Route::get('admin/scholen/overzicht', 'SchoolsController@overview')->middleware('approver+');
Route::get('admin/scholen/maken', 'SchoolsController@create')->middleware('approver+');
Route::post('scholen', 'SchoolsController@store')->middleware('approver+');
Route::get('scholen/{id}', 'SchoolsController@show');
Route::get('admin/scholen/{id}/bewerken', 'SchoolsController@edit')->middleware('admin');
Route::patch('admin/scholen/{id}', 'SchoolsController@update')->middleware('admin');
Route::delete('admin/scholen/{id}', 'SchoolsController@destroy')->middleware('admin');
Ainda não está tudo exatamente correto, mas fiquei paralisado desde que, quando faço login como usuário com direitos de Aprovador e tento acessar a visão geral das escolas, ele me redireciona de volta para a página inicial.
Em geral, parece que estou trabalhando muito caoticamente e não está certo, alguém poderia me dar conselhos sobre como fazê-lo com mais eficiência?
Muito obrigado antecipadamente!