我有一个管理面板,现在我需要给一些合作伙伴一个 URL 来查看他们指定的数据。我有一个用于存储这些合作伙伴登录信息的表,并通过它完成身份验证。但现在的问题是,经过身份验证后,合作伙伴可以访问其他每个管理页面。我可以在每个管理页面控制器中包含一个检查,以检查是否为合作伙伴设置了会话,如果是,我可以注销它们。但我有许多控制器。那么还有其他方法可以做到这一点吗?
2 回答
pǝlɐɥʞ 的解决方案肯定会起作用,但您需要编辑所有控制器。我想向您指出另一种方法。CodeIgniter 提供了 Hook 功能(不是最好的,但总比没有好)。Hooks 提供了在 CodeIgniter 核心中的某些操作发生之前执行代码的功能。
出于您的目的,我建议使用 'post_controller_constructor' 钩子,它将在控制器被实例化之后但在任何方法调用发生之前执行。
参考这里:http ://ellislab.com/codeigniter/user-guide/general/hooks.html
你的钩子可能看起来像这样
$hook['post_controller_constructor'] = array(
'class' => 'Auth',
'function' => 'has_permission',
'filename' => 'Auth.php',
'filepath' => 'hooks',
);
更新
通过获取 CodeIgniter ($ci =& get_instance()) 的实例,您将能够在传递给钩子的类中使用框架的所有功能(就像编写自己的 CI 库一样)。因此,您可以在那里检查会话并处理用户权限。
更新 2
ruuter 提醒我注意使用post_controller_constructor而不是pre_controller,它允许使用get_instance() (使用pre_controller无法使用)。使用post_controller_constructor的缺点是,在检查权限之前总是会调用控制器构造函数,这在某些情况下可能会导致麻烦。
- 感谢 ruuter 提供此信息
快乐编码:)
不知道你使用的是哪个版本的 codeigniter,所以不能告诉你确切的位置。但你可以创建一个名为 MY_Controller 的控制器,它扩展了 CI_Controller。
然后你所有的控制器都可以扩展 MY_controller。
MY_Controller 可以具有您所谈论的所有控制器所共有的功能。
请参阅本页底部http://ellislab.com/codeigniter/user-guide/general/core_classes.html