Для этого промежуточного программного обеспечения вам просто нужно проверить, нужен ли division
для просмотра сайта, такой же, как у division
, к которому принадлежит пользователь. В функции handle
, вы можете пройти 3-й аргумент, который представляет собой название отдела, такие как customer
При добавлении Middleware к вашим маршрутам, вы можете передать имя разделения в качестве аргумента функции 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"
});
Или вы могли бы применить его для маршрутизации ресурсов длямаршрутизации:
Route::resource('customer', 'CustomerController')->middleware(['divison:customer']);
Или вы можете просто применить его к определенному маршруту:
Route::get('customer/{id}', '[email protected]')->middleware(['division:customer']);
В вашей handle
функции вы можете получить доступ к этому значению как 3-й аргумент:
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;
});
});
Теперь вернемся к Middleware, можно легко сделать сравнение с $division
в нашей handle
функции, и наш 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