关于 tcg/voyager 创建 Bread 后浏览权限报错的解决办法

1. 出现的问题

使用 tcg/voyager 扩展包时,需要在后台添加(比如)文章管理,也就是创建 Bread ,创建完成后给予用户 browse/read/add/edit/delete 等权限,但是在浏览文章 Bread 后,在 debug 模式下会报错,提示: This action is unauthorized.

2. 出现此问题的原因

出现此问题,遂在 Github 上大致浏览了一下 issue,出现此问题的原因是,因为使用了自定义的 Policies ,导致 Voyager 无法通过授权。

3. 解决办法

解决办法就是创建一个 Trait ,比如 VoyagerPolicyTrait ,然后添加如下代码:

trait VoyagerPolicyTrait
{
    public function browse(User $user)
    {
        return $user->isAdmin();
    }

    public function edit(User $user)
    {
        return $user->isAdmin();
    }

    public function add(User $user)
    {
        return $user->isAdmin();
    }

    public function delete(User $user)
    {
        return $user->isAdmin();
    }

    public function read(User $user)
    {
        return $user->isAdmin();
    }
}

其中 $user->isAdmin() 是在 User 模型下添加的用来判断是否为管理员的方法,返回值类型为 boolean
然后在文章的 Policy 下使用该 Trait :

class PostPolicy
{
    use HandlesAuthorization;
    use VoyagerPolicyTrait;
    ...
}

参考:the-control-group/voyager issue

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

打扰,刚用voyage2天,请问VoyagerPolicyTrait写在哪里,我用php artisan make:policy VoyagerPolicyTrait命令生成的和贴出来的代码不一样

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!