laravel - Laravel 将自定义中间件添加到路由组
问题描述
在我的 Web 应用程序中,我有管理面板,我正在尝试通过以下代码访问他们具有管理员角色的用户:
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 () {
推荐阅读
- python - 我什么时候需要 Google App Engine 数据存储区的索引?
- python - localbitcoins API /buy-bitcoins-with-cash/ 端点问题
- facebook - 使用 webhook 获取公共页面发布参与更新是否可能/明智?
- python-3.x - 如何进行与(描述中的网站)上的结果匹配的基本 sha256 加密
- git - 我不想在 .git/config 中缓存我的帐户
- c++ - 类的初始化列表中的向量
- android - 从我的 Android 应用中检索我的 Spotify 播放列表 ID
- php - 变量变量的连接2个或多个变量
- javascript - 在特定时间后删除类的所有元素
- calayer - 如何有效地将 CALayer 变成 CVPixelBuffer?