Laravel每次使用特定控制器的功能时如何执行特定功能

时间:2017-04-28 11:25:22

标签: laravel controller

我正在运行laravel,我只是实现了PHP Excel,以便导出带有数据的Excel。出于安全原因,我想重新定位用户,如果他的Facebook ID与我的管理员facebook id"不匹配。

我的控制器名为 ExcelController ,其中包含不同的功能。

我不想在每个函数中使用下面的代码,所以我试图找到像__construct()那样执行的东西 - 每次访问此控制器时都会这样:

if(Auth::user()->facebook_id != env('facebook_id_admin_access')) {
      return redirect()->route('home');
}

env('facebook_id_admin_access')是一个.env变量(就像一个常量),我想提供访问权限的facebook id,以便它可以使用特定的控制器。

我尝试在控制器中创建一个public function __construct(){}并放置上面的代码块,但它没有被调用。

这可能吗?怎么样?我应该使用middleware吗?

  

编辑问题

1)创建了middleware CheckAdminAccess

   */
    public function handle($request, Closure $next)
    {

        if(Auth::user()->facebook_id != env('FACEBOOK_ID_ADMIN_ACCESS') || !Auth::check()) {
            return redirect()->route('/');
        }

        return $next($request);
    }

2)在app\http\kernel.php更新为

protected $routeMiddleware = [
        'admin_access' => 'App\Http\Middleware\CheckAdminAccess',
    ];

3)更新了routes.php

Route::get('/output/completed', 'ExcelController@completed')->middleware('admin_access');

但它似乎没有用,我忘了什么吗?

1 个答案:

答案 0 :(得分:0)

创建中间件后,

为了使其有效,我在我的routes.php中更改了:

Route::get('/output/completed', 'ExcelController@completed')->middleware('admin_access');

致:

Route::group(['middleware' => ['auth','admin_access']], function() {
    Route::get('/output/completed', 'ExcelController@completed');
});