政策不存在的 Laravel Gate 资源

Posted

技术标签:

【中文标题】政策不存在的 Laravel Gate 资源【英文标题】:Laravel Gate resource with policy not existing 【发布时间】:2017-05-24 12:38:40 【问题描述】:

我正在尝试在我的项目中实施策略,并且我有一个自定义方法 askFriend,我想将其添加到我的 UserRelationPolicy

所以我在我的 UserRelationPolicy 中实现了 askFriend 方法,但是当我尝试从 UserRelationPolicy@askFriend 调用它时,我问自己如何从这个方法调用它。

类似于$this->authorize('askFriend', $friend); 但它不起作用,完全忽略它。所以我在文档中进一步搜索,发现我可以使用 Gate 方法将UserRelationPolicy 中的特定方法绑定到这样的资源名称:

Gate::resource('userrelation', 'UserRelationPolicy', [
    'userrelation.askfriendrelation' => 'askFriendRelation'
]);

你可以在这里找到代表:Documentation Writing Gate

当我尝试执行此代码时,我收到以下错误:

Call to undefined method Illuminate\Auth\Access\Gate::resource()

仅此而已。 Resource 方法似乎根本不存在。经过多次搜索,尝试在标题中包含每个Gate。尝试静态或使用实例调用它。没有任何效果,而且方法也无处可寻……

是不是忘记了什么?如何从策略类中的控制器调用自定义方法?

【问题讨论】:

【参考方案1】:

您确定您使用的是 5.4 吗? Gate::resource 方法仅在 5.4 中实现。 如果您使用后面的任何版本,则必须使用Gate::define

像这样在App\Providers\AuthServiceProvider 中设置门的能力:

Gate::define('userrelation.askfriendrelation', 'UserRelationPolicy@askFriend');

【讨论】:

命令php artisan -v 给了我以下结果Laravel Framework 5.4.18 所以我认为我在正确的版本,但我没有找到方法... 检查 Illuminate\Auth\Access\Gate.php 的 Gate 类并与此比较:https://github.com/laravel/framework/blob/5.4/src/Illuminate/Auth/Access/Gate.php。如果代码有任何差异,您应该仔细检查您的 composer.json 并运行 composer update 我今天遇到了同样的错误,我跑了compose update,更新到5.4.24,问题就解决了。抓住机会。

以上是关于政策不存在的 Laravel Gate 资源的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 修复请求的资源上不存在“Access-Control-Allow-Origin”标头

Laravel Gate:授权不起作用

SQL:如果存在,则限制用户。如果不存在,则显示所有内容

我的网页的一项功能已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头

Laravel 2 BadMethodCallException 实例:'int 不存在'和'方法不存在'

Laravel,该类存在,但我得到目标类 [PagesController] 不存在