duanqun9618 2019-04-23 06:29
浏览 130
已采纳

使用Gate之前未调用的策略()

I created a policy named ProjectPolicy with one function:

public function update(User $user, Project $project)
{
    return $project->owner_id == $user->id;
}

I registered my policy in my AuthServiceProvider as:

protected $policies = [
    'App\Project' => 'App\Policies\ProjectPolicy'
]

Also in the AuthServiceProvider, I have this:

public function boot(Gate $gate)
{
    $this->registerPolicies();

    $gate->before(function ($user) {
        return $user->isAdmin();
    });
}

This is supposed to not apply the policy if the user is admin. But when I do this, it completely takes away the access for non-admin users. Why?

  • 写回答

1条回答 默认 最新

  • dongzhihong3940 2019-04-23 06:29
    关注

    To fix it, the boot method should be updated as:

    public function boot(Gate $gate)
    {
        $this->registerPolicies();
    
        $gate->before(function ($user) {
            return $user->isAdmin() ? true : null;
        });
    }
    

    From the https://laravel.com/docs/5.8/authorization#intercepting-gate-checks:

    If the before callback returns a non-null result that result will be considered the result of the check.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助