【问题标题】:Codeigniter module configuration and ACLCodeigniter 模块配置和 ACL
【发布时间】:2011-06-10 06:05:26
【问题描述】:

我正在使用 HMVC 在 codeigniter 中开发一个站点,该站点分为多个模块。我希望管理员启用/禁用模块,以下是我计划如何实现它。由于我在 PHP/Codeigniter 方面没有太多经验,因此以下方式可能非常错误,因此正在寻找建议/反馈:

数据库表:模块 身份证 |姓名 |状态

上表将包含所有模块信息,状态字段将包含禁用/启用值(0或1)。

我打算扩展主CI_Controller,并有一个检查模块状态的功能:

class MY_Controller extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->load->Model('Module_model'); //loads the module model
}
function check_module_state($module_name = '')
{
return $this->Module_model->getState($module_name); //the model returns TRUE or FALSE
}

现在,在每个控制器的构造函数中,我将扩展 MY_Controller 类,并调用check_module_state,如果它返回 FALSE,则将用户重定向到“Section Disabled Page”;

class Module1 extends MY_Controller{
public function __construct()
{
parent::__construct();
if($this->check_module_state('module1') == FALSE)
redirect('module_disabled', 'location');
}
}

上述方法有效吗,有没有更好更简单的替代方法? 谢谢

【问题讨论】:

    标签: php codeigniter module


    【解决方案1】:

    看起来不错。您如何描述功能听起来不错。但是,我会说,如果一个模块被禁用,则没有必要告诉人们它已被禁用。

    我将如何解决这个问题如下。

    我会使用模块表来构造导航项。如果启用了模块,则允许显示指向该模块的链接。如果模块被禁用,则不会显示任何链接。这并不意味着您可以摆脱控制器中的安全性,因为人们可能仍然使用 URL Surf。在 URL Surfing 到禁用模块的情况下,我会默默地重定向到默认模块,例如站点根目录(索引)。

    【讨论】:

    • 是的,不显示禁用模块的链接是个好主意。说到这里,如何有效地管理菜单?我在视图文件中调用吗?例如:if($this->Modules_model->isActive('module1') echo '<a href="' . base_url() . 'module1/">module1</a>'; 这样,我认为它会调用数据库,以便在菜单上显示所有模块。或者我是否确实调用了一次数据库,并将模块名称及其状态存储在一个数组中,然后检查该数组的状态?
    • @Damchey 这是一个可能的解决方案是的。我自己不使用 CI,但如果它像 ZF 并且支持站点范围的默认布局,那么您可以将导航内容全部粘贴在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多