无需登录用户即可使用登机授权的可能性

问题描述 投票:0回答:1

是否有可能在不使用用户身份验证服务的情况下使用Gate授权?

例如,我想定义一个门:

Gate::define('morning', function(){
    return date('H') < 12;
});

[当我执行Gate::allows('morning')或在控制器中时$this->authorize('morning')总是返回false,因为没有用户登录。

我如何仅对访客用户有效?

php laravel php-7 laravel-6
1个回答
0
投票

尽管可能有更好的解决方案,例如使用middleware或使用abort辅助功能:

abort_if(date('H') < 12, 403);

但是通过声明“可选的”类型提示或为用户参数定义提供空默认值来提供solution for policies:>

class DatePolicy
{
    /**
     * Determine if it's morning now!
     *
     * @param  \App\User  $user
     * @return bool
     */
    public function morning(?User $user)
    {
        return date('H') < 12;
    }
}

也可能适用于盖茨,但我尚未对此进行测试:

Gate::define('morning', function ($user = null) {
    return date('H') < 12;
});
© www.soinside.com 2019 - 2024. All rights reserved.