如何在laravel livewire中使用策略(返回,这不是特性)



我有如下部分代码所示的类别策略。

class CategoryPolicy
{
    use HandlesAuthorization;
    public function view(User $user, Category $category)
    {
        return true;
    }
}

然后,我从mount方法内部的livewire组件调用。

class Productcategorysetup extends Component
{
    use CategoryPolicy;
    public function mount()
    {
        $this->authorize('view',CategoryPolicy::class);  
    }
}

我收到错误信息

App\Http\Livewire\Generalsetting\Productcategorysetup不能使用App\Policies\CategoryPolicy-这不是特征

如有任何建议或指导,我们将不胜感激,谢谢。

要在Livewire中使用授权,您需要首先导入AuthorizesRequests特征,然后在类中使用它。

其次,当使用view时,authorize()的第一个参数是模型的实例——在您的情况下,是类别。但这听起来像是你想列出类别,即";索引";文件-这意味着您要检查viewAny(因为view用于特定资源(。在这种情况下,第二个参数是模型的类名,而不是模型的实例。

<?php 
use IlluminateFoundationAuthAccessAuthorizesRequests;
use AppModelsCategory;
class Productcategorysetup extends Component
{
    use AuthorizesRequests;
    public function mount()
    {
        $this->authorize('viewAny', Category::class);  
    }
}

然后在您的政策中,

class CategoryPolicy
{
    use HandlesAuthorization;
    public function viewAny(User $user)
    {
        return true;
    }
    public function view(User $user, Category $category)
    {
        return true;
    }
}

相关内容

最新更新