Seit Version 5.1 hat Laravel Richtlinien, die genau das sind, was Sie brauchen.
Sie können eingeben, indem Sie Befehl, um eine neue Richtlinie erstellen:
php artisan make:policy UserPolicy
In Ihrem UserPolicy Klasse können Sie das folgende Verfahren umfassen:
public function updateProfile(User $user, User $updatedUser) {
return $user->id === $updatedUser->id;
}
Bitte beachten Sie: Der erste Parameter user $ wird automatisch hinter den Kulissen aufgelöst und ist der aktuell angemeldete Benutzer. Wenn Sie die Richtlinie über die Gate-Fassade in Ihrer Anwendung überprüfen, müssen Sie nur den zweiten Parameter $ updateUser übergeben.
Dann müssen Sie Ihre Politik im AuthServiceProvider registrieren:
use Acme\User;
use Acme\Policies\UserPolicy;
...
class AuthServiceProvider extends ServiceProvider {
protected $policies = [
User::class => UserPolicy::class
]
Nun, wenn Sie Ihre Politik registriert Sie es über Ihre App überprüfen können die Gate-Fassade mit etwa so:
if(Gate::allows('updateProfile', $user)) {
// Your logic goes here
}
Oder der andere Ansatz mit Ich mag mehr mit der Ablehnungs-Methode und enthalten es am Anfang meiner Controller-Methoden und HTTP-Fehler zurück:
public function edit($id) {
if(Gate::denies('updateProfile', $user)) {
abort(403, 'You do not have permissions to access this page!');
}
// The check is passed and your can include your logic
}
Sie können auch für Berechtigungen in den Blade-Dateien überprüfen können mit und möchte nicht so:
@can('updateProfile', $user)
// Show something only to the user that can edit the $user's profile
@endcan
Für weitere Informationen die docs überprüfen.
Aber was hindert Benutzer daran, die URL mit einer anderen ID direkt einzugeben? –
Sie können überprüfen, dass in Ihrem Controller, wenn die $ ID, die übergeben wird, nicht in Ihrer Datenbank vorhanden ist, dann einen Fehler oder eine Nachricht zu werfen. –