php - 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;
}
}
如果我在策略类中创建一个构造函数,我可以确认它正在受到攻击并且我正在进入策略内部,这就是为什么这让我如此困惑。
我尝试更改方法的名称,以防它与命名约定冲突,但似乎没有任何同意。
我曾试图抛弃作曲家作为双重检查,但同样没有运气。
解决方案
问题在于当前没有经过身份验证的用户,尽管在方法参数中指定了用户,但它仍然失败。
提供来宾路由时,您仍然需要将参数添加到方法中,但使其成为可选参数。
public function create(?User $user)
{
// do logic here
}
可以在以下链接中找到相关文档:https ://laravel.com/docs/master/authorization#guest-users
推荐阅读
- node.js - Stripe API无法自动扣款如何处理(Stripe API key)
- haskell - 如何打印出二维数组haskell
- flutter - 颤振获取pdf文件字符串数据到变量
- python - 在Tensorflow中,我不知道为什么我训练了一个模型,训练损失减少了,但似乎没有训练
- python - Pymysql Sql 立场有变量
- javascript - 前端Node JS的基本理解
- python - 将包安装到 PyCharm 时遇到问题
- html - 为什么前五个切片顺时针不悬停,而其余切片则悬停,有没有办法在每个“切片”的左侧和右侧放置边框?
- formula - 从 Google Sheet 到 WPS 电子表格的过滤功能
- nginx - CORS 已配置但无响应