В моем приложении у меня есть три роли пользователя:
- пользователь
- редактор
- admin
Когда редактор входит вАдминистративный раздел, некоторые разделы скрыты (пользователи управляют, системная информация и т. д.) и, конечно, администратор может видеть все.
Итак, для этой цели я создал два промежуточных ПО: Admin и Editor.Это код.
Промежуточное программное обеспечение администратора.
<?php
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Closure;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::check()) {
if(Auth::user()->role_id == 3) {
return $next($request);
}
}
return redirect('/');
}
}
Промежуточное программное обеспечение редактора:
<?php
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Closure;
class Editor
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(Auth::check()) {
if(Auth::user()->role_id == 2) {
return $next($request);
}
}
return redirect('/');
}
}
Вот часть ядра:
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\Admin::class,
'editor' => \App\Http\Middleware\Editor::class,
];
Сейчас я пытаюсь построить маршруты, которые будут доступны для этих пользовательских ролей.Если я делаю это только для администратора или редактора, он работает нормально, но когда я объединяю их, один пользователь может войти в систему, а другой не может.
Вот код только для администратора, и он работает нормально.
Route::middleware('admin')->group(function(){
Route::get('/admin', 'PagesController@adminIndex');
Route::resource('/admin/pages', 'PagesController');
Route::resource('/admin/news', 'NewsController');
Route::resource('/admin/users', 'UsersController');
...
});
Я пытался объединить их с этим кодом, но он не работает (вообще не могу войти в раздел администратора):
Route::middleware(['admin', 'editor'])->group(function(){
Route::get('/admin', 'PagesController@adminIndex');
Route::resource('/admin/pages', 'PagesController');
Route::resource('/admin/news', 'NewsController');
Route::resource('/admin/users', 'UsersController');
...
});
Как я могу решить эту проблему?
PS Позже я хочу также построить логику для роли пользователя, поэтому необходимо объединить маршруты.