2017-05-29 80 views
0

我的问题是我有在Laravel多权威性,我试图做的是有一个授权这种模式应用\型号\联系,而不是应用程序\用户多AUTH授权错误

我政策

class AdminsPolicy 
{ 
    use HandlesAuthorization; 

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

    } 
} 

现在每当我做这样的事情在我的控制器

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

它总是返回false即使我的管理员角色是正确的

回答

1

通常Laravel的政策与特定资源有某种联系。 当使用策略,你必须在你的AuthServiceProvider注册像这样

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

正如你所看到的,政策是绑在这个例子中Post模型。

如果要检查,如果用户可以“视图”特定的帖子你必须通过这种模式为第二放慢参数:

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

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

也许你其实找Gate

你可以定义你的AuthServiceProviders开机功能是这样的:

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

好凉爽,比KS。现在我明白它总是需要绑定到一个对象 – eaponz