Route.php中的授权和身份验证:Laravel 5.1


Authorization along with Authentication in Route.php : Laravel 5.1

我有下面的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之外的其他重定向。在这种情况下,您需要合并authisAdmin中的方法,并使其适合您的需要。

您要做的是运行多个中间件——一个用于验证用户,另一个用于检查他的访问级别。

你想做的是定义数组中的中间件,如下所示:

<?php
Route::group([
    'middleware' => ['auth','isAdmin'],
], function() {
    Route::get('/Categories-List', 'Skills'Category_Controller@index');
});

您可以看到我添加了一个isAdmin中间件,它可以完成您需要的检查。您只需要自己创建中间件。

这里有很多关于中间件的其他信息:http://laravel.com/docs/master/middleware#assigning-路由的中间件