2016-05-23 10 views
0

Ich habe ein Modell namens Channel, das je nach Kauf entweder öffentlich oder privat verfügbar ist.Laravel-Modellfelder zurückgegeben, basierend auf der Benutzeranmeldung

Ich frage mich, was wäre der beste Weg, den Zugang zu einigen der Felder zu beschränken, wenn Sie nicht eingeloggt oder den Kanal gekauft haben.

Dies wird auf einer RestFUL API verwendet und ich benutze JWT daher jederzeit die Header überprüfen können, ob es vorhanden ist.

Ich dachte vielleicht vielleicht Laravel toArray Funktion auf dem Modell zu überschreiben und bestimmte Felder zu deaktivieren, wenn die Anforderungen nicht erfüllt sind, aber nicht sicher, ob dies die beste Praxis ist!

Irgendwelche Ideen?

Antwort

1

Wenn Sie schauen, um die minimale Menge an Arbeit hier zu tun, dann ja - überschreiben toArray() und wahrscheinlich sogar toJson() würde funktionieren, aber für mich fühlt es sich "janky".

Die $hidden Array steuert, welche werden Felder zurückgegeben, wenn ein Modell als JSON gerendert wird, so dass Sie ein verkettbar Methode erstellen könnte, die die $hidden Array ändert, bevor die Antwort zurückgibt:

$model = \App\MyModel::find($id); 
return $model->adaptFieldsToAuthStatus(); 

Sie würden dies tun, indem mit einem Bündel von conditionals in der adaptFieldsToAuthStatus() Funktion, die Felder zum $hidden Array hinzufügen:

if (Auth::check()) { 

    $this->hidden[] = 'super_secret_field_name'; 
    $this->hidden[] = 'super_secret_field_name2'; 

} 

// Return the instance of the class so it's chainable. 
return $this; 

ich denke, das ist, wie ich es tun würde.

Verwandte Themen