У меня есть группа user и роль admin для моих пользователей.
Что я хочу:
Другое действие контроллера для того же URL-адреса. Я думал, что следующее было бы неплохо, но это не работает.
В настоящий момент, когда я вхожу в систему как администратор, я получаю исключение, что мне не разрешено просматривать страницу.
routes/web.php
Route::group( [
'middleware' => [ 'auth', \App\Http\Middleware\UserLastActivity::class ],
'domain' => parse_url( env( 'APP_URL' ), PHP_URL_HOST )
], function () {
Route::group( [
'middleware' => [ \App\Http\Middleware\Admin::class ]
], function () {
Route::get('/', 'AdminController@index')->name('home');
} );
Route::group( [
'middleware' => [ \App\Http\Middleware\User::class ]
], function () {
Route::get( '/', 'CvController@index' )->name( 'home' );
} );
} );
Http/Middleware/User.php
<?php
namespace App\Http\Middleware;
use Closure;
class User {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
*
* @return mixed
*/
public function handle( $request, Closure $next ) {
if ( \Auth::user()->role->id === \App\User::ROLE_USER ) {
return $next( $request );
}
abort( 401 );
}
}
Http/Middleware/Admin.php
<?php
namespace App\Http\Middleware;
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::user()->role->id === \App\User::ROLE_ADMIN ) {
return $next( $request );
}
abort( 401, __('messages.http.unauthorized') );
}
}
Есть идеи, как этого добиться?
Чтобы было ясно:
Если у пользователя role_id 1 (admin): маршрут / должен выполнять AdminController@index
Когда у пользователя есть role_id 2 (user): маршрут / должен выполнять CvController@index






Я думаю, что лучшим подходом будет переосмыслить свои маршруты, поскольку это не хороший дизайн, если вы хотите следовать стандартам. У вас может быть один и тот же URL-адрес с разными контроллерами, когда петиция отличается (post, get, put и т. д.).
Не могли бы вы изложить логику того, что должно быть сделано в зависимости от роли пользователя внутри контроллера? Пример:
Route::get('/', 'UserController@index');
Затем в индексе UserController ->
public function index()
{
if (Auth::user()->role->id == 1) :
//do X
else :
//do y
endif;
}