Laravel策略(Guest User)

4

我有以下政策:

<?php

namespace App\Policies;

use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class EventPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can view the whole model.
     *
     * @param User $user
     * @return boolean
     */
    public function list(?User $user) {
        return true;
    }

}

AuthServiceProvider 包含正确的绑定:

protected $policies = [
    Event::class => EventPolicy::class,
];

在我的控制器中:
public function index() {
    $this->authorize('list');
    return $this->repository->paginate();
}

返回的是403禁止访问响应:

操作未经授权。

Laravel文档指出,您可以使声明User可选或将默认值设置为null。 我尝试过两种方法,但都没有成功。

我正在运行v5.8

有什么想法吗?


你使用的是哪个 Laravel 版本?似乎在 5.7+ 中添加了访客用户授权。 - apokryfos
我正在使用5.8版本。 - Ricky Barnett
1个回答

0

这可能是 Laravel 的内部错误,因为逻辑出现了某种问题(这只是一种假设)。

在这种情况下,您不应该为列表添加任何授权策略,因为每个人都可以查看结果。

所以你应该简单地这样做:

public function index()
{
    return $this->repository->paginate();
}

只有当用户确实被授权执行某些操作时,才定义策略。

后续编辑: 在服务提供者中,您是否导入了 Laravel 的 Event 类而不是 Event 模型?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接