2016-03-31 7 views
4

Ich habe ein Problem, ich kann keine Richtlinien in Laravel 5.2 verwenden.Wie richtig Richtlinien in Laravel 5.2 verwenden? Ich kann nicht

Ich habe 2 Tabellen, Studenten und Aufgaben.

Ich versuche, eine Richtlinie anwenden, um die Bearbeitung einer Aufgabe durch Ändern der URL zu verhindern, aber ich bekomme immer die Nachricht Diese Aktion ist nicht autorisiert obwohl die Aufgabe der richtige Benutzer ist.

Richtlinien:

<?php 

    namespace App\Policies; 

    use App\Models\Student; 
    use App\Models\Task; 

    class TasksPolicy 
    { 
     public function edit(Student $student, Task $tasks) 
     { 
      return $student->id === $tasks->student_id; 
     } 
    } 

-Code in AuthServiceProvider.php

<?php 

    namespace App\Providers; 

    use App\Models\Task; 
    use App\Policies\TasksPolicy; 

    class AuthServiceProvider extends ServiceProvider 
    { 
     /** 
     * The policy mappings for the application. 
     * 
     * @var array 
     */ 
     protected $policies = [ 
      Task::class => TasksPolicy::class 
     ]; 

Und dann der Aufruf in der TaskController.php Datei:

public function edit($id) 
    { 
     $tasks = Task::findOrFail($id); 
     $this->authorize('edit', $tasks); 
     return view('tasks.edit', compact('tasks')); 
    } 

Ich denke, der Code ist gut weil ich mehrmals überarbeitet habe, aber wie gesagt habe ich immer die Nachricht Diese Aktion ist nicht autorisiert obwohl die Aufgabe ist, den Benutzer zu bearbeiten.

http://i.imgur.com/2q6WFb3.jpg

Was mache ich falsch? Wie kann ich die Richtlinie richtig verwenden?

+0

I don‘ Ich denke, es soll zwischen zwei Modellen verwendet werden. Einer von ihnen muss das "Benutzer" -Modell sein. – Hkan

+0

Hallo, Tabellenbenutzer verwenden es für andere Benutzer, also muss ich die Schüler-Tabelle verwenden (Ich benutze multi-Auth Laravel 5.2). –

+0

Was bekommen Sie, wenn Sie 'dd ($ student-> id, $ tasks-> student_id)' in der 'edit()' Methode verwenden? –

Antwort

0

Sie verwenden „===“, was bedeutet, dass beide Seiten Daten und Datentypen werden match.May Ihre Daten angepasst werden, nicht Datentyp, können Sie versuchen, mit „==“

public function edit(Student $student, Task $tasks) 
    { 
     return $student->id == $tasks->student_id; 
    } 
+0

Gleiches Ergebnis. Danke für Ihre Hilfe. –

+1

Und === ist der empfohlene Vergleichsoperator in den Dokumenten. –

+0

das ist kein großes Problem, was Dokumentation sagte, Tatsache ist, dass wir Operator verwenden, wie wir brauchen –