Laravel 将自定义中间件添加到路由组
Laravel add custom middleware to route group
在我的网络应用程序中,我有管理面板,我正在尝试通过以下代码访问具有管理员角色的用户:
namespace App\Http\Middleware;
use Closure;
class CheckUserAdminRole
{
public function handle($request, Closure $next)
{
if (auth()->check()) {
if (auth()->check() && !auth()->user()->hasRole('admin')) {
auth()->logout();
return redirect(route('system.messages','userIsNotAdmin'));
}
}
return $next($request);
}
}
在我的路线中,我有这个路线组:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web'], 'prefix' => 'dashboard'], function () {
$this->group(['prefix' => 'administrator'], function () {
$this->get('panel', 'AdminController@index');
});
我的内核:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
...
\App\Http\Middleware\CheckUserAdminRole::class,
];
现在,当我将我的中间件作为 CheckUserAdminRole
添加到路由组时,就像使用此代码一样:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','CheckUserAdminRole'], 'prefix' => 'dashboard'], function () {
我收到这个错误:
Class CheckUserAdminRole does not exist
此代码无法解决我的问题:
php artisan route:clear
php artisan cache:clear
php artisan config:clear
composer dump-autoload
不要在 $middleware
数组中注册您的中间件,您应该像这样在 $routeMiddleware
中注册它:
protected $routeMiddleware = [
...
'checkAdmin' => \App\Http\Middleware\CheckUserAdminRole::class,
];
注意:在 $middleware
数组中注册中间件会导致它针对 每个 请求执行,因此不适用于特定路由。
然后你可以在你的路线中使用它 checkAdmin
名称:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','checkAdmin'], 'prefix' => 'dashboard'], function () {
您也可以像这样轻松地将中间件和路由组一起使用:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function()
{
//All the routes that belongs to the group goes here
Route::get('dashboard', function() {} );
});
You can try middleware with prefix and groups.
Route::middleware(['Auth'])->prefix('api/')->group(function() {
Route::group(['prefix' => 'review/'], function () {
Route::get('/', 'User\Controllers\Api\UserController@getUserReviews');
});
});
希望对您有所帮助
这是一个简单的修复,无需触及 Kernel
文件并利用 Policy
。 accessAdmin
是在 Policy
文件中创建的函数。
Route::group(['namespace' => 'Dashboard', 'middleware' => 'can:accessAdmin, App\User', 'prefix' => 'dashboard'], function () {
$this->group(['prefix' => 'administrator'], function () {
$this->get('panel', 'AdminController@index');
});
在我的网络应用程序中,我有管理面板,我正在尝试通过以下代码访问具有管理员角色的用户:
namespace App\Http\Middleware;
use Closure;
class CheckUserAdminRole
{
public function handle($request, Closure $next)
{
if (auth()->check()) {
if (auth()->check() && !auth()->user()->hasRole('admin')) {
auth()->logout();
return redirect(route('system.messages','userIsNotAdmin'));
}
}
return $next($request);
}
}
在我的路线中,我有这个路线组:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web'], 'prefix' => 'dashboard'], function () {
$this->group(['prefix' => 'administrator'], function () {
$this->get('panel', 'AdminController@index');
});
我的内核:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
...
\App\Http\Middleware\CheckUserAdminRole::class,
];
现在,当我将我的中间件作为 CheckUserAdminRole
添加到路由组时,就像使用此代码一样:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','CheckUserAdminRole'], 'prefix' => 'dashboard'], function () {
我收到这个错误:
Class CheckUserAdminRole does not exist
此代码无法解决我的问题:
php artisan route:clear
php artisan cache:clear
php artisan config:clear
composer dump-autoload
不要在 $middleware
数组中注册您的中间件,您应该像这样在 $routeMiddleware
中注册它:
protected $routeMiddleware = [
...
'checkAdmin' => \App\Http\Middleware\CheckUserAdminRole::class,
];
注意:在 $middleware
数组中注册中间件会导致它针对 每个 请求执行,因此不适用于特定路由。
然后你可以在你的路线中使用它 checkAdmin
名称:
Route::group(['namespace' => 'Dashboard', 'middleware' => ['auth:web','checkAdmin'], 'prefix' => 'dashboard'], function () {
您也可以像这样轻松地将中间件和路由组一起使用:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function()
{
//All the routes that belongs to the group goes here
Route::get('dashboard', function() {} );
});
You can try middleware with prefix and groups.
Route::middleware(['Auth'])->prefix('api/')->group(function() {
Route::group(['prefix' => 'review/'], function () {
Route::get('/', 'User\Controllers\Api\UserController@getUserReviews');
});
});
希望对您有所帮助
这是一个简单的修复,无需触及 Kernel
文件并利用 Policy
。 accessAdmin
是在 Policy
文件中创建的函数。
Route::group(['namespace' => 'Dashboard', 'middleware' => 'can:accessAdmin, App\User', 'prefix' => 'dashboard'], function () {
$this->group(['prefix' => 'administrator'], function () {
$this->get('panel', 'AdminController@index');
});