2016-09-04 4 views
3

Ich benutze policies für die Benutzerautorisierung. Wie verwende ich Richtlinien für Gastbenutzer?Gast Benutzer in Laravel Autorisierungsrichtlinien

Hier ist mein Code:

In Controller:

class PostController extends Controller 
{ 
    public function index(Post $post) 
    { 
     $this->authorize($post); 
     return $post->all(); 
    } 
} 

In Politik:

class PostPolicy 
{ 
    // This function executes only for authenticated users. 
    // I want to use it for guest users too 
    public function index(User $user) 
    {    
     return $user->can('get-posts'); 
    } 
} 

Antwort

0

Ich denke, die einfachste Art und Weise mit Auth-Middleware zu schützen ist. oder überprüfen, ob Benutzer in Politik authentifiziert

+0

Ich kann es nicht in Richtlinie überprüfen, da diese Funktion nicht ausgeführt wird, wenn Benutzer nicht authentifiziert wird – Ildar

+1

Dann schützen Sie Route mit Auth Middleware. –

7

zuerst einen neuen Dienstleister machen:

php artisan make:provider GuestServiceProvider 

Dann bearbeiten GuestServiceProvider.php mit diesem:

public function boot() 
{ 
    // Laravel policies only work if the user isn't null so for guest access we need to assign a dummpy user. 
    // From now on to check for guest use is_null(Auth::user()->getKey()) 
    if(!Auth::check()) { 
     $userClass = config('auth.providers.users.model'); 
     Auth::setUser(new $userClass()); 
    } 
} 

Jetzt Richtlinien für Gastbenutzer arbeiten und In Ihrer Richtlinie können Sie nach dem Gast suchen, indem Sie Folgendes tun:

if(is_null(Auth::user()->getKey())){ 
    // it's a guest 
} 

Das bedeutet im Wesentlichen, wenn der Benutzer keine ID hat, dann ist es kein echter Benutzer, daher muss er ein Gast sein.

Verwandte Themen