gpt4 book ai didi

php - Phalcon:实现 "login required"功能的最佳实践

转载 作者:可可西里 更新时间:2023-10-31 23:30:33 29 4
gpt4 key购买 nike

我正在 PHP Phalcon 中实现一个中型 Web 应用程序,其中包含可公开访问的 URL 和一些只有在用户通过身份验证后才能访问的 URL。Django 提供装饰器 (login_required),如果未通过身份验证,则将用户重定向到登录页面。在 Phalcon 中以最少的代码重复实现类似功能的最佳方法是什么。我探索了以下选项:

  1. Acl:这看起来更像是一种根据用户类型(管理员/ super 管理员)而不是用户状态(登录与未登录)实现权限的方法
  2. 事件管理器:这看起来更像是一种捕获信号的方式(登录后等),但可以通过将调度事件附加到一个插件来用于重定向,该插件在 beforeExecuteRoute 中检查所需的登录
  3. Controller 继承:使用 beforeExecuteRoute 方法创建 Controller ,子类继承该属性。问题是任何实现自己的 beforeExecuteRoute 的子类都需要先显式调用父函数。

如有任何帮助,我们将不胜感激。

PS:我是 Phalcon 的新手,之前对 Django 有一点经验。

最佳答案

大多数时候,我都是根据 #2 和 Controller /方法上的注释来实现此功能的。我宁愿创建一个 \Phalcon\Mvc\User\Plugin 扩展,在 beforeExecuteRoute 期间检查(使用 session )访问者是否已通过身份验证,以及(使用注释)是否有权访问当前的 action@controller。提供相当大的灵 active ,但有一个主要缺点 - 如果使用 $dispatcher->forward() 转发操作,它可能会运行几次,但这在非公共(public) CRM 中非常必要。

对于您的情况,根据我的实践,我认为矛盾的最简单方法是将项目分成两个模块:后端和前端。在前端部分访问所有公共(public)控件后,您将在后端模块中拥有需要身份验证的 Controller 。这样就可以根据列出的任何选项创建性能方面的身份验证,从而将您的公共(public) Controller 与您的问题隔离开来。

基本上你的问题是基于意见的,你也列出了几乎所有可能的方法。这只是一个品味或轻松的问题,您的实现将是什么。

关于php - Phalcon:实现 "login required"功能的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28289251/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com