为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 8 | 不打策略方法

Laravel 8 | 不打策略方法

PHP
GCT1015 2024-01-19 10:29:48
我试图在 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';    });}正如前面所说,这在另一个项目中完美运行。以下是我的政策,您可以看到它非常基本。<?phpnamespace App\Policies;use App\Models\User;class UserPolicy{    public function create(User $user)    {        return true;    }}如果我在策略类中创建一个构造函数,我可以确认它正在受到攻击,并且我正在进入策略内部,这就是为什么这让我如此困惑。我尝试更改方法的名称,以防它与命名约定发生冲突,但似乎没有任何内容与之一致。我曾尝试将作曲家作为双重检查,但再次没有运气。
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

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


当提供访客路由时,您仍然需要将参数添加到方法中,但将其设为可选。


public function create(?User $user)

{

    // do logic here

}

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


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 27 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信