我正在运行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');
但它似乎没有用,我忘了什么吗?
答案 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');
});