Ich baue einige API-Endpunkte mit Laravel, und ich verwende JWTAuth als Token-Anbieter für die Autorisierung von Anfragen.Wie verhindert man den Zugang zu Model by ID mit JWTAuth und Laravel?
Ich habe das Setup bekommen eine Gruppe von API Routen zu schützen, die korrekt mit funktioniert:
Route::group(['prefix' => '/v1', 'middleware' => 'jwt.auth'], function() {
Route::resource('messages', 'MessagesController');
});
Das Message
Modell gehört zu einer User
ich mit einigen Anfragen auszuführen bin versucht, dass Beziehung, während die Anforderung von der Bereitstellung von Daten, die nicht zu dem Benutzer gehören:
- Erhalten Sie eine Liste der Meldungen des angemeldeten Benutzers
- eine einzelne Nachricht des angemeldeten Benutzers Erhalten
Die wichtigste Frage ich habe, ist, wie der Benutzer zu verhindern, dass eine Message
zugreifen, die ihnen nicht gehören. Ich habe dies in meinem Controller:
public function show($message_id)
{
$message = Message::findOrFail($message_id);
return $message;
}
, die offensichtlich die Message
zurückkehren werden, unabhängig davon, ob es gehört zu diesem Benutzer. Haben Sie Vorschläge, wie Sie den Zugriff auf die Nachrichten anderer Benutzer einschränken können?
Für die Auflistung aller Nachrichten, konnte ich die folgenden in der Steuerung tun:
public function index()
{
$user_id = Auth::User()->id;
$messages = Message::where('user_id', $user_id)->paginate(10);
return $messages;
}
Dies funktioniert, aber ich bin nicht sicher, ob dies der beste Weg ist, es zu tun . Vielleicht ist es, aber ein Feedback würde geschätzt werden. Ich bin verwirrt darüber, ob die Middleware mit dem umgehen soll, auf was der Benutzer Zugriff hat oder ob er Teil der eloquenten Abfrage sein sollte.
Sie möchten wahrscheinlich einen [globalen Bereich] (https://laravel.com/docs/5.4/eloquent#global-scopes). Sie können den Bereich bei Bedarf auf alle Abfragen eines bestimmten Modells anwenden. – Ohgodwhy
Haben Sie schon eine Lösung gefunden? – Gayan