我使用的是Laravel 5.3。我已经能够创建策略类,但是当我尝试注册一个门关闭时,它总是被拒绝。
以下是AuthServiceProvider
中的boot()
方法
public function boot()
{
$this->registerPolicies();
Gate::define('view-admin-index', function ($user, $company) {
return true;
});
}
这是转储时的输出。
dd(Gate::has('view-admin-index')); => true
dd(Gate::allows('view-admin-index', $company)); => false
更新
如果这样做,我也会false
而不是"here"
:
// 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));
更新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 :(得分:0)
看起来你甚至没有打电话给关闭。如果您当前没有对用户进行身份验证,则会出现这种情况。见Source Here。如果您在dd(Auth::user())
之前致电Gate::allows('view-admin-index', $company)
,是否收到任何输出?
如果您需要手动登录用户,您可以随时执行:
Auth::login(User::find($id));
答案 1 :(得分: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
});