2016-05-15 67 views
2

它有时需要检查用户授权的行动不带参数,如创建/存储方法:如何在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; 
    } 
} 

,并使用PostController中授权方法:

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

     //... 
    } 
} 

但似乎政策方法没有参数不能对应于控制器上的授权方法,并且授权总是失败。

回答

3

如果策略方法已经不带参数的定义是这样的:

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; 
    } 
} 

您可以使用授权方法是这样的:

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); 

     //... 
    } 
} 

和内使用@can刀片指令刀模板:

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

也可以使用Gate外墙,User型号或policy帮手。

+1

它坚持不工作,直到我明确定义授权方法中的类(\ App \ Post :: class)..使用App \ Post将无法工作。 –

相关问题