如何将Laravel 4.2 beforeFilter在控制器中转换为Laravel 5.2中的自定义中间件

问题描述 投票:1回答:1

我正在升级我继承到Laravel 5.2的Laravel 4.2应用程序。对于使用之前过滤器处理的登录用户,该应用程序具有多个角色。每个控制器都有一系列允许这些功能的功能和角色:

public $actionFilter = [
    'directories-create'=>['super','tsr'],
    'directories-destroy'=>['super','tsr'],
    'directories-edit'=>['super','tsr'],
    'directories-directoryinfo'=>['super','tsr','admin'],
    'directories-index'=>['super','tsr'],
    'directories-store'=>['super','tsr'],
    'directories-update'=>['super','tsr'],
];

然后在构造函数中,它调用Controller.php中的两个beforeFilters

public function __construct()
{
    $this->beforeFilter('@filterAuthorization');
    $this->beforeFilter('@rerouteSite');
}

Controller.php有一个公共函数filterAuthorization,它检查用户的角色是否有权访问该路由,以及一个公共函数rerouteSite,它允许用户保持在同一页面上但在帐户之间切换(例如,支持代表)。

我花了相当多的时间阅读手册,谷歌搜索和阅读各种教程,但我仍然不清楚如何让我的路由角色阵列连接到auth中间件。 Laravel文档提供语法但不提供上下文,我读过的示例采用不同的方法或者与我的用法不同。

我尝试将过滤器函数留在Controller.php中并在构造中调用它们:

public function __construct()
{
    $this->middleware('@filterAuthorization');
    $this->middleware('@rerouteSite');
}

我收到一条错误消息:“类@filterAuthorization不存在”

我尝试将这些函数放在app \ Http \ Middleware \ Authenticate中,但我收到相同的错误消息:“类@filterAuthorization不存在”

我按照Matt Stauffer的博客(https://mattstauffer.com/blog/laravel-5.0-middleware-filter-style/)和这里(https://mattstauffer.com/blog/passing-parameters-to-middleware-in-laravel-5.1/)以及Nwanze Franklin的帖子(https://dev.to/franko4don/deep-dive-into-middlewares-in-laravel-doo)的步骤进行如下操作。

使用Artisan创建两个新的中间件文件

php artisan make:middleware FilterAuthorization
php artisan make:middleware RerouteSite

使用旧Controller.php中的函数编辑新的中间件文件

在App \ Http \ Kernel中注册新的中间件

protected $routeMiddleware = [
    'filterauth' => \Illuminate\Routing\Middleware\FilterAuthorization::class,
    'reroutesite' => \Illuminate\Routing\Middleware\RerouteSite::class,
];

编辑控制器中的公共函数__contstruct()而不是需要过滤

public function __construct()
{
    $this->middleware('FilterAuthorization');
    $this->middleware('RerouteSite');
}

composer dump-autoload
php artisan clear-compiled
php artisan optimize

我仍然得到相同的错误:类FilterAuthorization不存在

我确信有一种简单的方法可以将它放在一起,而无需重写整个角色授权系统。有人能指出我正确的方向吗?

laravel-5.2 user-roles laravel-middleware
1个回答
0
投票

内核注册需要引用正确的文件位置,如下所示:

    'filterauth' => \App\Http\Middleware\FilterAuthorization::class,
    'reroutesite' => \App\Http\Middleware\RerouteSite::class,

控制器启动应该使用别名而不是类名:

public function __construct()
{
    $this->middleware('filterauth');
    $this->middleware('reroutesite');
}

然后Laravel可以找到自定义中间件。

© www.soinside.com 2019 - 2024. All rights reserved.