2017-05-29 10 views
0

Mein Problem ist, ich ein Multi-Auth in Laravel tun haben, was ich zu tun versuchen, ist eine Genehmigung zu diesem Modell App \ Models \ Admin statt App \ User inMulti Auth Berechtigungsfehler

haben, meine Politik

class AdminsPolicy 
{ 
    use HandlesAuthorization; 

    public function view(\App\Models\Admin $admin) 
    { 
     return in_array($admin->role, [2,3,4]); 

    } 
} 

jetzt, wenn ich so etwas wie dies in meinem Controller tun

dd(Auth::guard('admin')->user()->can('view')); 

es immer false zurück, auch wenn mein Admin-Rolle richtig ist

Antwort

1

Normalerweise sind die Richtlinien in Laravel irgendwie an eine bestimmte Ressource gebunden. Wenn Sie eine Richtlinie verwenden, haben Sie es in Ihrem AuthServiceProvider wie diese

/** 
* The policy mappings for the application. 
* 
* @var array 
*/ 
protected $policies = [ 
    Post::class => PostPolicy::class, 
]; 

registrieren Wie Sie in diesem Beispiel auf einen Beitrag Modell sehen kann, wird die Politik gebunden.

Wenn Sie überprüfen möchten, ob ein Benutzer ‚view‘ einen spezifischen Beitrag, den Sie haben, dieses Modell als zweite Paramter weitergeben müssen:

if($user->can('view', $post) { ... } 

// or if you don't need a specific instance : 
if($user->can('create', Post::class) { ... } 

Vielleicht haben Sie in der Tat sind der Suche nach einem Gate

Sie könnten in Ihrer AuthServiceProviders Boot-Funktion etwas wie folgt definieren:

Gate::define('view', function(\App\Models\Admin $admin) { 
     return in_array($admin->role, [2,3,4]); 
    }); 
+0

Ok cool, als ks. Jetzt verstehe ich, dass es immer an ein Objekt gebunden sein muss – eaponz

Verwandte Themen