CodeIgniter中的访问控制问题

时间:2013-05-16 08:40:14

标签: codeigniter access-control

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

2 个答案:

答案 0 :(得分: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 =&amp; get_instance()),您将能够使用您传递给钩子的类中框架的所有功能(就像编写自己的CI库一样)。因此,您可以在那里查看会话并处理用户权限。

更新2

ruuter让我注意使用 post_controller_constructor 而不是 pre_controller ,这允许使用 get_instance()(使用<不可用<强> pre_controller )。使用 post_controller_constructor 的缺点是,在检查可能在某些情况下可能导致问题的权限之前,将始终调用控制器构造函数。

- 感谢ruuter提供此信息

快乐编码:)

答案 1 :(得分:1)

Dunno你正在使用哪个版本的codeigniter,所以无法告诉你确切的位置..但你可以创建一个名为MY_Controller的控制器,它扩展了CI_Controller。

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

MY_Controller可以拥有您所需要的功能,这些功能对于您所说的所有控制器都是通用的。

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