2017-05-29 78 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