我正在使用 Laravel 11.36.1,当我尝试在没有模型的策略方法中获取授权状态时(如文档所解释的),它总是返回“false”。我试着放一个
dd('hello world')
看看它是否显示不同的东西,但它不起作用。
<?php
namespace App\Policies;
use App\Models\User;
class UserPolicy
{
public function create(User $user): bool
{
dd('hello word', $user->id);
}
}
User::find(2)->can('create'); // Returns `false`
User::find(2)->can('create', User::find(5)); // Returns the dd with `hello world` and `2`
User::find(2)->can('create', User::class); // Returns `false`
User::find(2)->can('create', new User); // Returns the dd with `hello world` and `2`
// Test in Pest
test('example', function() {
$user = \App\Models\User::factory()->create();
$this->actingAs($user);
dd(
auth()->user()->can('create') // Returns `false`
);
});
User::find(2)->can('create'); // Returns `hello world` and `2`
Laravel Permission
(v6.9)。Gate::policy(User::class, UserPolicy::class)
放入AppServiceProvider.php
的启动方法中,没有任何区别。User::find(2)->can('create', new User)
既不是一个最佳的、可维护的和美观的解决方案,所以我放弃了它。我解决了这个问题。 在 Laravel 文档中解释说,如果该能力不需要模型,则需要传递对父模型的引用(在我的例子中是用户模型)。
use App\Models\User;
User::find(2)->can('create', User::class); // It works now!