Laravel如何使用spatie权限中间件?

How to use spatie permission middleware in Laravel?

我正在使用 Laravel 8 和 Spatie 角色和权限。每个动作的许可工作正常。但是,如果我将 delete action 权限分配给子管理员,但我直接从 URL 中点击 create action middlware 无法像用户那样停止操作没有创建权限。

 public function __construct(CustomerInterface $customerInterface)
{
    $this->customerInterface = $customerInterface;
    $this->middleware(['permission:create_customer|delete_customer|edit_customer|chnage_customer_status']);
}

我在构造函数中使用上述中间件。我该如何解决这个问题。

据我从 documentation 中得知,当您使用具有多个权限的 permission 中间件时,如果 至少 一个权限签出。

您需要的是基于方法的授权,为此,Laravel 使用 policies,它默认允许您为常用方法编写单独的授权。 (索引、存储、更新、显示等)

假设您允许用户仅在拥有 create_customer 权限的情况下使用 store 方法,您的策略将如下所示:

    /**
     * Determine whether the user can create models.
     *
     * @param User $user
     * @return mixed
     */
    public function create(User $user)
    {
        return $user->can('create_customer');
    }

然后在您的控制器中,放置 authorizeResource 函数将默认策略方法与您的默认资源控制器方法相关联:

    public function __construct(CustomerInterface $customerInterface)
    {
        $this->customerInterface = $customerInterface;
        $this->authorizeResource(Customer::class); // assuming your model name is Customer
    }

或者,您可以编写自己的自定义策略方法并通过 $this->authorize 方法使用它们,该方法在 here.

中有进一步的记录