2016-05-15 3 views
2

Es ist manchmal notwendig, Benutzerautorisierung für eine Aktion ohne Argument zu prüfen, wie/Speicher-Methode erstellen:Wie definiert man eine Richtlinienmethode ohne Argument in Laravel 5.2?

class PostPolicy 
{ 
    use HandlesAuthorization; 

    /** 
    * Determine if the user can create a new post. 
    * 
    * @param \App\User $user 
    * @return bool 
    */ 
    public function create(User $user) 
    { 
     if($user->is_admin) 
     { 
      return true; 
     } 

     return false; 
    } 
} 

und das Autorisieren Methode in Postcontroller verwenden:

class PostController extends Controller 
{ 
    /** 
    * Show the form for creating a new post. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function create() 
    { 
     $this->authorize('create'); 

     //... 
    } 
} 

Aber es scheint, dass eine Methode Politik ohne Argumente kann der authorize-Methode auf einem Controller nicht entsprechen und die Autorisierung schlägt immer fehl.

Antwort

3

Wenn eine Richtlinie Methode ohne Argumente wie folgt definiert:

class PostPolicy 
{ 
    use HandlesAuthorization; 

    /** 
    * Determine if the user can create a new post. 
    * 
    * @param \App\User $user 
    * @return bool 
    */ 
    public function create(User $user) 
    { 
     if($user->is_admin) 
     { 
      return true; 
     } 

     return false; 
    } 
} 

können Sie die authorise Methode wie folgt verwenden:

class PostController extends Controller 
{ 
    /** 
    * Show the form for creating a new post. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function create() 
    { 
     $this->authorize('create', \App\Post::class); 

     //... 
    } 
} 

und innerhalb Blattvorlagen durch die @can Blade-Direktive :

@can('create', \App\Post::class) 
    <!-- The Current User Can Update The Post --> 
@endcan 

Es ist auch möglich,zu verwendenFassade, die User Modell oder die policy Helfer.

+1

Es besteht nicht funktionieren, bis ich explizit die Klasse (\ App \ Post :: Klasse) in der Authorize-Methode definieren .. Verwendung App \ Post wird nicht funktionieren. –