我有下面的Route,它检查用户是否经过身份验证,然后才允许他们访问页面
<?php
Route::group([
'middleware' => 'auth',
], function() {
Route::get('/Categories-List', 'Skills'Category_Controller@index');
});
在我的auth()->user()
中,有RoleID
用于检查用户是管理员还是其他角色。我想检查RoleID
是否为1,然后只允许他们访问该页面。
我可以在Laravel 5.1 中设置授权和身份验证吗
好的,所以您需要创建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
中的方法,并使其适合您的需要。
您要做的是运行多个中间件——一个用于验证用户,另一个用于检查他的访问级别。
你想做的是定义数组中的中间件,如下所示:
<?php
Route::group([
'middleware' => ['auth','isAdmin'],
], function() {
Route::get('/Categories-List', 'Skills'Category_Controller@index');
});
您可以看到我添加了一个isAdmin
中间件,它可以完成您需要的检查。您只需要自己创建中间件。
这里有很多关于中间件的其他信息:http://laravel.com/docs/master/middleware#assigning-路由的中间件