与Route.php中的身份验证一起授权:Laravel 5.1

时间:2015-12-17 15:25:24

标签: php laravel laravel-5 laravel-5.1 laravel-middleware

我在Route下方检查用户是否经过身份验证,然后才让他们访问该页面

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

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

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

我可以在Laravel 5.1中设置授权和身份验证

2 个答案:

答案 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。在这种情况下,您需要合并authisAdmin中的方法,并使其符合您的需求。

答案 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