2016-04-06 15 views
0

Ich benutze Laravel 5.2. Also lerne ich, wie man mit Rollen und Berechtigungen umgehen kann Authorization. Alles läuft gut. Ich habe sogar meine eigene Policy PostPolicy gemacht.Laravel Klinge @ can Politik - String

Und jetzt zu dem Problem. Ich lade die $ Post-Daten in die Ansicht im PostsController, die dann in Blade geladen wird.

Posts:

public function show($id) 
{ 
    $post = Post::find($id); 

    return view('posts.show', compact('post')); 
} 

Beiträge/show.blade.php:

@section('content') 
<!-- begin --> 
@can('hasRole', Auth::user()) 
    <h1>Displaying Admin content</h1> 
@endcan 

@can('hasRole', Auth::user()) 
    <h1>Displaying moderator content</h1> 
@endcan 

@can('hasRole', Auth::user()) 
    <h1>Displaying guest content</h1> 
@endcan 

Politik:

public function hasRole($user) 
    { 
     // just for test 
     return true; 
    } 

Nun wird der gesamte Inhalt zurückgegeben.

Wenn ich ändern, um die @can('hasRole', Auth::user()) von Auth :: Benutzer() in einen String, das heißt

@can('hasRole', 'guest') 
    <h1>Displaying guest content</h1> 
@endcan 

In diesem Fall gibt es nichts zurück. Da ich neu bei Laravel bin, weiß ich wirklich nicht, dass es nicht funktioniert.

+1

Die docs Sie einen Link in den Zustand „Für die Bequemlichkeit, Laravel bietet die '@ can'-Blade-Direktive, um schnell zu überprüfen, ob ** der aktuell authentifizierte Benutzer ** eine bestimmte Fähigkeit besitzt." – ceejayoz

Antwort

1

Sie haben die Dokumente wahrscheinlich nicht sorgfältig genug gelesen. Sie sollten als zweites Argument ein Modell, kein String oder ein Benutzerobjekt übergeben. In Ihrem Fall sollten Sie wahrscheinlich so etwas verwenden:

@section('content') 
<!-- begin --> 
@can('hasRole', $post) 
    <h1>Displaying Admin content</h1> 
@endcan 

@can('hasRole', $post) 
    <h1>Displaying moderator content</h1> 
@endcan 

@can('hasRole', $post) 
    <h1>Displaying guest content</h1> 
@endcan 

Aber die Frage ist, was Sie wirklich erreichen wollen. Wenn Sie Benutzerrollen nur zum Überprüfen von Berechtigungen verwenden möchten, müssen Sie diese Anweisung nicht verwenden.

Sie können Ihre User Modellfunktionen in den

public function hasRole($roleName) 
{ 
    return $this->role == $roleName; // sample implementation only 
} 

und jetzt können Sie in Ihrer Klinge verwenden aktuelle Rollen für

Beispiel überprüfen:

@section('content') 
<!-- begin --> 

@if (auth()->check())  
    @if (auth()->user()->hasRole('admin')) 
     <h1>Displaying Admin content</h1>  
    @elseif (auth()->user()->hasRole('moderator')) 
     <h1>Displaying moderator content</h1> 
    @endif  
@else 
    <h1>Displaying guest content</h1> 
@endif 
+0

Vielen Dank für die ausführliche Antwort. – pbalazek

Verwandte Themen