【问题标题】:Codeigniter - Authentication Library or Custom Controller?Codeigniter - 身份验证库或自定义控制器?
【发布时间】:2011-12-27 19:25:55
【问题描述】:

我想知道在我的情况下什么是最好的。我正在使用 CodeIgniter 构建一个包含两个主要部分的站点:

  • 公共部分可供所有人使用
  • 仅供注册用户使用的私人网站

在公共区域(一个控制器)的每个页面中,我想放置一个登录表单和一个注册链接,如果用户已登录,他必须被重定向到私人区域,或者链接可能是显示。

现在我有两个选择:

  1. 用户控制器是我首先想到的,但在网站的每个页面中,我都需要控制用户是否已登录,这是不可能或非常糟糕的,因为我正在使用另一个控制器
  2. 所以我开始研究一个库,但我不确定如何实现它(例如表单验证应该由控制器还是由库本身来实现?数据库连接呢,因为我没有模型?)

你认为什么是最好的?为什么?以及如何实施?

(是的,我喜欢重新发明轮子,而不是使用现有的库,主要是因为我想学习如何去做)

【问题讨论】:

  • Users的构造函数中检查用户是否登录如何?
  • 但是由于我使用不同的控制器来显示站点的页面,所以我不能调用另一个控制器的方法或简单地用构造函数加载它而不破坏 mvc 模型
  • CI 是一个不好的框架来学习如何正确地做到这一点,因为它是静态的,因此对于扩展和重用来说不灵活——尤其是在涉及控制器时。理想情况下,我会用访问检查来装饰需要它的控制器,并在路由中定义哪些控制器需要访问检查。如果控制器需要它们,应用程序控制器将执行访问检查。
  • 我可以扩展 ci_controller 类来做到这一点...

标签: php codeigniter authentication


【解决方案1】:
Super Controller
            =>assign user data,settings,configs etc
      |-----private controller extends super controller
            =>check user credentials
      |-----admin controller extends super controller
            =>check user && admin credentials

你的超级控制器就是你的公共控制器,只要你只做任务,不检查......

任何你想要公开的东西都只是扩展超级控制器

任何你想要的私有扩展私有控制器

【讨论】:

  • 好主意,这样您就可以阻止部分/部分视图或小部件 if(Modules::run('auth/_check_permissions', $user_id))
【解决方案2】:

表单验证和查询作业应由控制器本身执行。该库就像一个工具,无需在其中实现这些东西,但根据需要,您可以在其中使用查询来检查一些数据,但最好在控制器中工作。

拥有日志标志的想法是:

  1. 当用户登录时,为其创建一个会话以显示访问权限。
  2. 每次会话检查私处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多