php – 访客用户的授权和策略

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 访客用户的授权和策略脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
案例:我正在使用Laravel的授权作为使用策略的主干来构建一个论坛.我运行的检查示例包括@can(‘view’,$forum)和@can(‘reply’,$topic),Gate :: allow(‘create_topic’,$forum)等.这些检查基本上检查是否users角色具有特定论坛,主题或帖子的权限.这样我就可以为我的应用程序中的每个论坛赋予角色非常具体的权限.

问题是所有这些检查都通过Gate类,特别是一个名为raw()的方法,它在第一行中执行此操作:

if (! $user = $this->resolveUser()) {
    return false;
}

这在处理论坛时会出现问题.我的应用程序的访客应该被允许查看我的论坛,但是从上面的代码可以看出,如果用户没有登录,Laravels Gate类会自动返回false.

即使没有用户,我也需要能够触发我的策略.在我的Forumpolicy @ view方法中说,如果(User :: guest()&& $forum-> hasGuestViewAccess()){return true}

但正如您所看到的,此方法永远不会触发.

我还有办法让访客用户使用Laravel的授权功能吗?

我不知道有一种超自然的方法来实现这一点,但是如果有必要,你可以更改门的用户解析器,它负责查找用户(认情况下它从Auth :: user()读取).

由于解析器受到保护并且没有setter,因此您需要在创建时对其进行修改.门is instantiated in Laravel’s AuthServiceProvider.您可以扩展此类并使用您的子类替换app.PRoviders配置中的引用.

这将取决于你返回什么样的客户对象(只要它是真实的),但我可能会使用像空的用户模型:

protected function registerAccessGate()
{
    $this->app->singleton(GateContract::class,function ($app) {
        return new Gate($app,function () use ($app) {
            $user = $app['auth']->user();
            if ($user) {
                return $user;
            }
            return new \App\User;
        });
    });
}

您可以更进一步,在其上设置一个特殊属性,如$user-> isGuest,甚至可以定义一个特殊的guest类或常量.

或者,您可以在Auth级别调整您的进程,以便所有已注销的会话都包含在对Auth :: setUser($guestUserObject)的调用中.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 访客用户的授权和策略全部内容,希望文章能够帮你解决php – 访客用户的授权和策略所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。