3

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

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

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

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

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

4

2 回答 2

8

好的,所以您需要创建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用户未登录时。在这种情况下,您需要合并来自authand的方法isAdmin并使其适合您的需求。

于 2015-12-24T09:45:20.807 回答
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

于 2015-12-17T15:34:04.630 回答