我一直将用户身份验证放在 中application/models/user_model.php
,但这真的是放置该功能的最佳位置吗?
让我怀疑这种编码方式的原因是,我听说模型应该只适用于数据库。所以这意味着与会话相关的东西不能在模型中。真的是这样吗?
我通过user_model
.config/autoload.php
我一直将用户身份验证放在 中application/models/user_model.php
,但这真的是放置该功能的最佳位置吗?
让我怀疑这种编码方式的原因是,我听说模型应该只适用于数据库。所以这意味着与会话相关的东西不能在模型中。真的是这样吗?
我通过user_model
.config/autoload.php
它应该是真实 MVC 和受 MVC 启发的设计模式中的模型层的一部分,因为logged-in
它将是域对象的状态,视图应该通过身份验证/识别服务对其进行检查。
您可能会从阅读这篇文章中受益,但这里有一个快速提示 - 模型不依赖于 SQL 数据库或任何其他特定的存储介质。会话只是一种不同的存储形式。
不幸的是,CodeIgniter 实际上并没有实现 MVC 或受 MVC 启发的设计模式,而是复制了 Rails。这意味着,除非您想在 CI 中实现适当的模型层(这并不容易),否则您将不得不执行此检查,CodeIgniter 将其称为“控制器”。
更新
您可能想研究将授权检查放在控制器外部的方法(如此处所述)。这样,当您检测到当前用户无权访问方法时,您将获得对代码执行的额外控制,并且不会“锁定”所选控制器。
如果您在控制器内部进行授权检查,您最终会重定向客户端,并且您必须在某些情况发生变化时重写每个控制器(因此违反OCP)。
将身份验证服务的初始化和授权检查的执行放在控制器之外不会违背 MVC 的思想,因为在 MVC 的定义中,视图只负责改变模型层和当前视图的状态。关于实例化它们没有任何说明。因此,在对控制器执行操作之前初始化身份验证服务(它是模型层的一部分)是可以的。