在CodeIgniter中制作管理页面的最佳方法?

时间:2009-11-09 20:22:55

标签: php codeigniter access-control

我正在使用CodeIgniter中的应用程序,我想要为应用程序中的几个对象提供管理页面,我想知道将这些应用程序放入MVC结构的更好方法。

创意1:  在每个控制器中,有一个管理功能,并将我想要的所有管理页面添加到该功能中。 示例网址:domain.com/articles/admin

创意2  创建一个新的管理控制器,它必须引用许多不同的模型,并将所有管理页面放在那里。 示例网址:domain.com/admin/articles

哪种方式会更好?

编辑以澄清:通过管理员功能,我的意思是能够对任何对象执行基本的CRUD操作,并能够显示所有所述对象的列表。

7 个答案:

答案 0 :(得分:6)

绝对是一个不同的控制器至少!

我曾经认为我可以将所有管理功能保存在一个控制器中,但随着程序的增长,我意识到我的管理部分需要多个控制器。

因此,我在控制器文件夹中创建了一个名为“admin”的文件夹,并将所有管理控制器放在那里。所以我的文件夹看起来像:

  • 应用
    • 控制器
      • front.php
      • 的welcome.php
      • 管理员
        • dashboard.php
        • useradmin.php
  • 等...

但是,这会产生一个问题,那就是当您在浏览器中键入 http://mysite.com/admin 时,它会返回404页面。因此,转到“application / config / routes.php”文件并添加自定义路由:

$routes['admin'] = 'admin/dashboard/index';

答案 1 :(得分:2)

在控制器文件夹中有一个管理员文件夹是个好主意,您可以在其中访问管理员,例如yoursite.com/admin/users。

所有管理需求都将存在,所有方法都将通过检查用户权限来保护:

if ( ! $this->auth->logged_in(array('login', 'admin')))
{
    $this->session->set_flashdata('message', 'You do not have access to view this page');

    redirect('admin/users/login');
}

然后'admin'文件夹之外的所有控制器将 - 根据您的网站类型 - 将仅用于查看等。没有管理部分。

答案 2 :(得分:2)

我会回应Justin让它成为各个控制器的一部分。

您应该设置某种授权系统,各个控制器可以使用这些系统来登录(用户名)以及他们拥有的访问权限(admin / member / etc)。 Here's a SO thread on CodeIgniter Auth Classes

然后视图将有条件地显示相应的链接,并且控制器将通过在将任何数据传递到模型或呈现编辑视图之前检查auth来强制执行策略。在未经授权的访问时,可以呈现错误,或者使用非编辑视图进行渲染。

这种方法似乎最有意义(至少对我而言),因为所有功能都存储在单个控制器中。将管理功能保存在单个管理控制器中意味着每次添加一些新的(或删除某些东西)时,您将必须管理两个控制器(管理员和实际控制器)。

如果您担心在每个控制器中进行auth检查,您可以创建一个包含所有auth设置的通用控制器类,然后让控制器扩展它。最后,单个控制器验证检查可以简单:

function edit()
{
    if(!$this->auth()){
        //display auth error, or forward to view page
    }
}

当然,某种ACL实现会使这更好,但我不相信CodeIgniter有一个'官方'ACL。

答案 3 :(得分:2)

理念2更好。 系统/应用/控制器/管理

您将所有管理员控制器保留在此处。

答案 4 :(得分:2)

以下是对每种方法的利弊的详尽指南:

http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter

答案 5 :(得分:1)

根据“管理”功能的含义...通常,这被视为“修改”视图。

通常,您使用现有控制器提供“编辑”视图,允许授权用户进行编辑(在您的情况下,仅限管理员用户)。

答案 6 :(得分:0)

看起来像个人选择,我喜欢集中所有内容,因此管理员控制器将是我的赌注。

这样我就不必在修改管理任务时打开5个不同的控制器。