首页 > 解决方案 > Laravel 8 | 不打策略方法

问题描述

我正在尝试在 Laravel 8 中定义一些我无法开始工作的策略,但是我在 Laravel 7 中有相同的项目,它看起来很完美。

我正在使用 JSON API 规范包,它内置了授权器,允许我在不同的方法上运行策略。

无论如何,我都在尝试在所有路由上添加“创建”策略。

我有以下代码:

public function create($type, $request)
{
    $this->authorize('create', $type);
}

在这种情况下和示例中,$type = 'App\Models\User'如果我dd在该行之前执行一个操作,我可以确认我正在使用该方法。

在我的里面AuthServiceProvider我有以下内容:

public function boot()
{
    Gate::guessPolicyNamesUsing(function ($modelClass) {
        return 'App\\Policies\\' . class_basename($modelClass) . 'Policy';
    });
}

如前所述,在另一个项目中完美运行。

以下是我的策略,您可以看到它非常基本。

<?php

namespace App\Policies;

use App\Models\User;

class UserPolicy
{
    public function create(User $user)
    {
        return true;
    }
}

如果我在策略类中创建一个构造函数,我可以确认它正在受到攻击并且我正在进入策略内部,这就是为什么这让我如此困惑。

我尝试更改方法的名称,以防它与命名约定冲突,但似乎没有任何同意。

我曾试图抛弃作曲家作为双重检查,但同样没有运气。

标签: phplaravel

解决方案


问题在于当前没有经过身份验证的用户,尽管在方法参数中指定了用户,但它仍然失败。

提供来宾路由时,您仍然需要将参数添加到方法中,但使其成为可选参数。

public function create(?User $user)
{
    // do logic here
}

可以在以下链接中找到相关文档:https ://laravel.com/docs/master/authorization#guest-users


推荐阅读