簡體   English   中英

保護管理員和用戶路由laravel 5

[英]protecting admin and user routes laravel 5

我具有管理員和用戶的通用登錄名。 但是我在表中創建了一個角色,如下所示:

user_id      role_id
1              2
2              1
3              2

其中role_id 1代表管理員,而role_id 2代表用戶。 我也可以將角色附加到其他用戶。 現在我想要的是,我想保護所有管理路由和用戶路由。

例如,我不希望用戶獲得任何針對管理員的訪問權限。 現在,我可以檢查用戶是admin還是類似if (Auth::user()->hasRole('admin'))if (Auth::user()->hasRole('user'))

在這種情況下,應如何將用戶路由和管理路由分開? 我應該自己制作中間件並實施嗎? 如果是這樣,如何正確實施?

創建兩個中間件,對於管理員,您可以執行以下操作:

<?php namespace App\Http\Middleware;

use Auth;
use Illuminate\Contracts\Routing\Middleware;

class CheckAdmin implements Middleware {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        if (Auth::user()->hasRole('admin'))
        {
            return $next($request);

        }

        throw new \Exception("Unauthorized");
    }

}

然后在App\\Http\\Kernel啟用此中間件

protected $routeMiddleware = [
    'auth' = 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',

    'checkAdmin' => 'App\Http\Middleware\CheckAdmin',
];

您可以在route.php文件或Controller的構造函數中使用CheckAdmin中間件

routes.php您可以執行以下操作:

Route::group(['middleware' => 'checkAdmin'], function () {

    Route::get('admin/profile', function () {
        // Uses CheckAdmin Middleware
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM