【问题标题】:Authorization along with Authentication in Route.php : Laravel 5.1Route.php 中的授权和身份验证:Laravel 5.1
【发布时间】:2016-03-24 03:13:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案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 的方法并满足您的需求。

    【讨论】:

    • @Helper 当用户不是管理员时会发生吗?如果是这样,您是否为/ url 定义了任何中间件?您应该在AdminMiddleware 中重定向到您不使用isAdmin 中间件的路由
    • 如果用户登录但不是管理员,并且点击受isAdmin保护的路由,它将被重定向到/,然后他们将再次被重定向到/ - 这就是你得到这个的原因.您应该在 AdminMiddleware 中使用新路由,例如 restricted 并创建新路由 restricted,在其中显示此页面仅限管理员使用,或者您应该使用重定向到登录用户的主 url
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多