Phalcon:实施“需要登录”功能的最佳实践

时间:2015-02-03 00:17:28

标签: php phalcon

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

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

    PS:我是Phalcon的新手,曾经在Django有过一些经验。

1 个答案:

答案 0 :(得分:2)

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

根据我的实践,我认为最简单的方法是将项目分为两个模块:后端和前端。让所有公共控件都可以在前端部分访问,您将在后端模块中拥有需要身份验证的控制器。这样就可以根据列出的任何选项创建一个性能认证,将您的公共控制器与您的问题隔离开来。

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