簡體   English   中英

如何通過Laravel 5.2中的登錄角色保護路由?

[英]How to protect the route by the login role in Laravel 5.2?

我正在使用laravel 5.2。 我在用戶登錄時遇到問題,如果他們知道URL,則他們可以打開管理頁面。 這是我的導航欄菜單:

@if(Session::get('Mem_Username') == 'Guest')
<li>
<a href="{{ url ('Client') }}"><i class="fa fa-building fa-fw"></i> Client List</a>
</li>
@endif
@if(Session::get('Mem_Role') == '1')
<li>
<a href="{{ url ('Lead') }}"><i class="fa fa-th-list fa-fw"></i> Leads</a>
</li>
<li>
<a href="{{ url ('Client') }}"><i class="fa fa-building fa-fw"></i> Client List</a>
</li>
@elseif(Session::get('Mem_Role') == '2')
<li>
<a href="{{ url ('Lead') }}"><i class="fa fa-th-list fa-fw"></i> Leads</a>
</li>
@endif

我已經把它放在每個控制器中

public function __construct()
{
    $this->middleware('auth');
}

順便說一句,我正在使用Session將Authenticate.php文件更改為如下所示:

public function handle($request, Closure $next, $guard = null)
    {
        if(Session::has('Mem_Username')){

        }
        else{
            return redirect()->guest('');
        }

        return $next($request);
    }
php artisan make :middleware AdminMiddleware

它將在下面創建一個新的中間件: App/Http/Middleware打開中間件,放置代碼:

public function handle($request, Closure $next)
{
    if(!auth->user()->isAdmin()){
        abort(404);
    }
    return next($request);
}

在用戶模型下,請確保您具有一個isAdmin()方法來檢查當前用戶是否為admin。

注冊中間件

現在,我們已經創建了中間件,我們需要讓應用程序知道中間件的存在。 如果要在每個請求上運行中間件,請轉到app / Http / kernel.php並將中間件' isAdmin '添加到Kernel類$middleware property

protected $middleware = [
    ...
    \App\Http\Middleware\AdminMiddleware::class
];

如果您希望中間件在某些路由上觸發,我們可以命名中間件並將其用作將其添加到某些路由的參考機制。 要命名中間件,盡管仍在app/Http/kernel.php ,但將鍵屬性添加到$routeMiddleware數組中。 數組鍵是中間件的名稱,而值應該是中間件的isAdmin

protected $routeMiddleware = [
    ...
    'isAdmin' => \App\Http\Middleware\AdminMiddleware::class,
    ...
];

然后,您可以使用此中間件保護您的路由。

Route:get('someurl', 'Controller')->middleware('isAdmin');

暫無
暫無

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

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