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