0

我有一个管理面板,现在我需要给一些合作伙伴一个 URL 来查看他们指定的数据。我有一个用于存储这些合作伙伴登录信息的表,并通过它完成身份验证。但现在的问题是,经过身份验证后,合作伙伴可以访问其他每个管理页面。我可以在每个管理页面控制器中包含一个检查,以检查是否为合作伙伴设置了会话,如果是,我可以注销它们。但我有许多控制器。那么还有其他方法可以做到这一点吗?

4

2 回答 2

3

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 提供此信息

快乐编码:)

于 2013-05-16T08:57:08.517 回答
1

不知道你使用的是哪个版本的 codeigniter,所以不能告诉你确切的位置。但你可以创建一个名为 MY_Controller 的控制器,它扩展了 CI_Controller。

然后你所有的控制器都可以扩展 MY_controller。

MY_Controller 可以具有您所谈论的所有控制器所共有的功能。

请参阅本页底部http://ellislab.com/codeigniter/user-guide/general/core_classes.html

于 2013-05-16T08:44:35.183 回答