[英]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.