Für diese Middleware, müssen Sie nur überprüfen, ob die division
erforderlich ist, um die Website anzuzeigen ist die gleiche wie die division
, dass der Benutzer gehört. In der handle
Funktion können Sie ein drittes Argument übergeben, die eine Teilung Namen, wie customer
Wenn Sie die Middleware auf Ihre Routen hinzufügen, können Sie den Namen der Abteilung repräsentiert als Argument an die handle
Funktion wie so passieren können :
'middleware' => ['division:customer']
Implementierung dieser in einem Route Group
etwas wie folgt aussehen:
Route::group(['prefix' => 'customer', 'middleware' => ['division:customer']], funtion(){
//route definitions for all these routes will require a "division" type of "customer"
});
Oder Sie könnten es fürzu routen Ressourcen einzufrierenRouting:
Route::resource('customer', 'CustomerController')->middleware(['divison:customer']);
Oder Sie könnten es nur auf eine bestimmte Strecke gelten:
Route::get('customer/{id}', '[email protected]')->middleware(['division:customer']);
In Ihrer handle
Funktion Sie diesen Wert als das dritte Argument zugreifen:
public function handle($request, Closure $next, Division $division)
zu Machen Sie den Prozess der automatischen Auflösung einer Abhängigkeit durch etwas anderes als den Primärschlüssel einfach, wir gehen voran und öffnen unsere App\Providers\RouteServiceProvider
und fügen Sie etwas Magie innerhalb der boot
Funktion hinzu.
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;
});
});
Nun, zurück an die Middleware, können wir leicht einen Vergleich gegen die $division
in unserer handle
Funktion machen, und unsere authorized
Benutzer.
if(app()->user()->division->type == $division->type) {
return $next($request);
}
abort(403, 'You are not authorized to view this page!');
Was ist das Beziehungsszenario? 1 Benutzer gehört nur zu einer Abteilung? oder 1 Benutzer gehört zu vielen? –
Ein Benutzer gehört zu einer Abteilung, eine Abteilung hat viele Benutzer. – Orange
der richtige Weg sollte zwei Gruppenrouten mit Middleware haben, für Admin und Kunden – xmhafiz