我在Route下方检查用户是否经过身份验证,然后才让他们访问该页面
<?php
Route::group([
'middleware' => 'auth',
], function() {
Route::get('/Categories-List', 'Skills\Category_Controller@index');
});
在我的auth()->user()
中,有RoleID
来检查用户是管理员还是其他角色。我想检查RoleID
是否为1,然后只让他们访问该页面。
我可以在Laravel 5.1中设置授权和身份验证
答案 0 :(得分:6)
好的,所以您需要创建AdminMiddleware
并将其添加到路线。
首先,打开您的User
模型并在其中添加额外的方法:
public function isAdmin()
{
return $this->RoleID == 1;
}
现在在控制台中运行:
php artisan make:middleware AdminMiddleware
打开AdminMiddleware.php
并更改handle
方法,使它看起来像这样:
if (!\Auth::user()->isAdmin()) {
if ($request->ajax()) {
return response('Admin account required.', 401);
} else {
return redirect('/'); // set here any url you need
}
}
return $next($request);
现在打开app/Http/Kernel.php
并添加到$routeMiddleware
属性新条目:
'isAdmin' => \App\Http\Middleware\AdminMiddleware::class,
最后修改你的路线
'middleware' => 'auth',
到
'middleware' => ['auth', 'isAdmin'],
此处的订单很重要,如果您在此处更改订单,如果未记录用户,您将收到意外的例外情况。
根据您的需要,您可能还希望在此处仅使用isAdmin
中间件,以防此用户在未记录用户时进行其他重定向,而不是auth
。在这种情况下,您需要合并auth
和isAdmin
中的方法,并使其符合您的需求。
答案 1 :(得分:2)
您要做的是运行多个中间件 - 一个用于授权用户,另一个用于检查其访问级别。
您要做的是在数组中定义中间件,如下所示:
<?php
Route::group([
'middleware' => ['auth','isAdmin'],
], function() {
Route::get('/Categories-List', 'Skills\Category_Controller@index');
});
您可以看到我添加了isAdmin
中间件,可以进行您需要的检查。您只需要自己创建中间件。
有关路线中间件的大量其他信息:http://laravel.com/docs/master/middleware#assigning-middleware-to-routes