Ich bin ein Tutorial auf Laravel Gates, wo Benutzer mit der Berechtigung 'Update-Post' dürfen jeden Beitrag in der Datenbank bearbeiten. Darüber hinaus kann jeder Benutzer unabhängig von Berechtigungen die von ihm gesendeten Beiträge bearbeiten.Laravel Benutzer Erlaubnis, eigenen Beitrag zu aktualisieren
app/Anbieter/AuthServiceProvider.php:
Gate::define('update-post', function ($user, \App\Post $post) {
return $user->hasAccess(['update-post']) or $user->id == $post->user_id;
});
Routen/web.php:
Route::get('/edit/{post}', '[email protected]')
->name('edit_post')
->middleware('can:update-post,post');
Route::post('/edit/{post}', '[email protected]')
->name('update_post')
->middleware('can:update-post,post');
Was ich suche ist eine Möglichkeit, eine neue Berechtigung hinzuzufügen, sagen ‚update -own-post ', wo nur Benutzer mit dieser Berechtigung ihre eigenen Beiträge bearbeiten dürfen.
So hätte ein Moderator zum Beispiel die Berechtigung 'update-post', mit der er alle Beiträge bearbeiten kann. Ein regulärer Benutzer kann seinen eigenen Post nur bearbeiten, wenn er die neue Berechtigung 'update-own-post' erhält, aber nicht jeden Benutzer, wie er gerade implementiert ist.
Was ist der beste Weg, diese Änderung in meinem Code zu implementieren?
Danke, dass Sie mich in die richtige Richtung weisen. Ich konnte erreichen, was ich brauche, indem ich das Tor zu folgendem ändere: 'Gate :: define ('update-post', Funktion ($ user, \ App \ Post $ post) { if (($ user-> id == $ post-> user_id) && ($ user-> hasAccess (['update-own-post']))) return true; sonst if ($ user-> hasAccess (['update-post'])) return true; }); 'Würde aber einen saubereren Code schätzen. –
Ich bin froh, dass Sie es geschafft haben, überprüfen Sie meinen Code für eine sauberere Version von dem, was Sie haben. Außerdem empfehle ich, in PHP nach PHP zu suchen ("' || ''), damit Sie einige der zusätzlichen Bedingungsprüfungen loswerden können. http://php.net/manual/en/language.operators.logical.php – kyle