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

Authorization along with Authentication in Route.php : Laravel 5.1

我有下面的路由检查用户是否通过身份验证,然后才让他们访问页面

<?php
Route::group([
    'middleware' => 'auth',
], function() {

    Route::get('/Categories-List', 'Skills\Category_Controller@index');
});

在我的 auth()->user() 中,有 RoleID 检查用户是管理员还是其他角色。我想检查 RoleID 是否为 1 然后只允许他们访问该页面。

我可以在 Laravel 5.1

中设置授权和身份验证吗

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

你想要做的是像这样在数组中定义中间件:

<?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

好的,所以您需要创建 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 的方法并使其满足您的需要。