对于这个中间件,你只需要检查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