2016-12-19 9 views
0

私はLaravel 5.3を使用しています。私はポリシークラスを作成できましたが、ゲートクロージャを登録しようとすると、常に拒否されます。ここゲート閉鎖は常に拒否されます

はAuthServiceProvider

ここ
public function boot() 
{ 
    $this->registerPolicies(); 

    Gate::define('view-admin-index', function ($user, $company) { 
     return true; 
    }); 
} 

boot()方法であって、ダンプ時に出力されます。

dd(Gate::has('view-admin-index')); => true 
dd(Gate::allows('view-admin-index', $company)); => false 

がこれを行う場合、私はまたfalse代わりの"here"を取得

UPDATE:

// In AuthServiceProvider 
Gate::define('view-admin-index', function ($user, $company) { 
    dd('here'); 
    return true; 
}); 

// In controller, output is false 
dd(Gate::allows('view-admin-index', $company)); 

UPDATEは2

// In controller, there is an authenticated user and output is false 
dd(auth()->user()); // => User 
dd(Gate::allows('view-admin-index', $company)); // => false 
+0

出力します 'ddは()'クロージャ内からは何ですか? –

+0

私は 'Gate'クロージャー内で' dd() 'を実行したときの結果を表示するように答えを更新しました –

答えて

0

あなたのように見えますクロージャを呼び出すことさえできません。現在認証されているユーザーがいない場合の動作です。 Source Hereを参照してください。 Gate::allows('view-admin-index', $company)の直前にdd(Auth::user())と電話すると出力が出ますか?

手動でいつでも行うことができ、ユーザログインする必要がある場合:私は同じ問題を抱えている

Auth::login(User::find($id)); 
+0

ユーザーが認証されたことを示すために私の答えが更新されました –

0

を、それはLaravel 5.3.28の大きなバグのように見えます。 引数としてコレクションを受け入れないだけです。ここ は私の回避策です:

コード:

Gate::define('xx', function ($auth, $user) { 
    return 1; 
}); 

Route::get('example', function() 
{ 
    $user = User::first(); 
    dd(Gate::allows('xx', $user)); //false 
}); 

私の回避策:

Route::get('example', function() 
{ 
    $user = (object)User::first()->toArray(); 
    dd(Gate::allows('xx', $user)); //true 
}); 
関連する問題