2017-06-02 5 views
0

Ich habe eine Richtlinie, die überprüft, ob der authentifizierte Benutzer einen Berater löschen kann.Laravel-Richtlinie wird nicht autorisiert zurückgegeben

Leider ist die Antwort immer nicht autorisiert, und ich bin mir nicht sicher warum!

Richtlinienfunktion (ClinicConsultantPolicy):

public function delete(User $user, Consultant $consultant) 
    { 
     $consultant_clinic_id = $consultant->clinic_id; 
     return $user->clinic->id === $consultant_clinic_id; 

    } 

-Controller die obige Funktion aufrufen (ClinicConsultantController):

public function destroy($id) 
    { 
     $consultant = Consultant::find($id); 
     $this->authorize('delete', $consultant); 

     Consultant::find($id)->delete(); 

     return redirect('clinic/consultants'); 
    } 

Wenn ich Ausgang die beiden Variablen die Politik zu entsprechen versucht (Benutzer-Klinik-ID und die Klinik-ID des Beraters), beide gleich 2.

Allerdings ist einer von ihnen entweder nicht 2 oder vielleicht nicht definiert, wenn er die Richtlinie erreicht, aber ich bin mir nicht sicher warum? Vielen Dank für deine Hilfe.

+1

Haben Sie die Politik registriert? Fügen Sie 'dd ($ user-> clinic-> id, $ consultant-> clinic_id)' in die Löschrichtlinie ein, um zu überprüfen, ob sie aufgerufen wird, und um die Werte zu überprüfen. – Sandeesh

+0

Sie hatten recht, ich habe vergessen, die Politik zu registrieren! Solch ein Versehen! Vielen Dank @Sandesh. – Ben

Antwort

0

Für mich sieht es aus wie ein Modell Beziehungsproblem beim Aufruf $user->clinic->id. Es wäre sehr hilfreich, wenn Sie die Implementierung der Beziehung bereitstellen würden. Ich kann nur vorschlagen, $user->clinic()->first()->id zu schreiben, wenn Ihre Beziehung als eins zu viele festgelegt ist. Prost

Verwandte Themen