关于 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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

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

1年前 评论

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