對於這個中間件,你只需要檢查division
查看站點所需要的是否與用戶所屬的division
相同。在handle
功能,你可以通過它表示一個部門名稱的第三個參數,如customer
當您添加中間件到你的路線,你可以通過師的名字作爲參數傳遞給handle
功能,像這樣:
'middleware' => ['division:customer']
這在Route Group
實現可能看起來是這樣的:
Route::group(['prefix' => 'customer', 'middleware' => ['division:customer']], funtion(){
//route definitions for all these routes will require a "division" type of "customer"
});
或者你可以把它應用到路由資源RESTful
路由:
Route::resource('customer', 'CustomerController')->middleware(['divison:customer']);
或者您也可以將其應用到具體路線:
Route::get('customer/{id}', '[email protected]')->middleware(['division:customer']);
在你handle
功能,您可以訪問該值作爲第三個參數:
public function handle($request, Closure $next, Division $division)
要通過主鍵以外的其他方式自動解決依賴關係的過程,我們將繼續並打開我們的App\Providers\RouteServiceProvider
並在boot
函數中添加一些魔力。現在
public function boot(Router $router)
{
parent::boot($router);
$router->bind('division', function($value) {
return Division::where(function($query) use($value){
if (is_int($value)) {
return $query->where('id', $value)->first();
} else {
return $query->where('type', ucfirst($value))->first();
}
return null;
});
});
,回中間件,我們可以很容易地針對我們的handle
功能$division
,我們authorized
用戶的比較。
if(app()->user()->division->type == $division->type) {
return $next($request);
}
abort(403, 'You are not authorized to view this page!');
什麼是關係情景? 1個用戶只屬於一個分區?或1個用戶屬於多少? –
一個用戶屬於一個部門,一個部門擁有多個用戶。 – Orange
正確的方法應該有兩個中間件集團路線,爲管理員和客戶 – xmhafiz