所有管理员/用户功能检查他/她是否已登录 - 如何避免这种情况?

时间:2011-03-06 14:59:08

标签: php oop codeigniter

我是非常非常新的MVC(刚刚开始)所以这个问题可能很愚蠢,但我需要知道如果用户登录我的管理员/用户模型的功能,如何自动检查。

我可以把检查结构,这会有所帮助,但我有几个模型,也许还有一些更好的方法。我希望您在看到我的文件夹结构和代码后能够更好地理解我想要的内容。哦,顺便说一下 - 我使用Code Igniter 2.0

文件夹:

controllers/
../admin/
../../item.php
../../cat.php

让我们看一下 item.php 文件......

<?php

class Item extends CI_Controller
{

    function Index()
    {

        //Checking if admin is logged in on every function is bad

        /* 
         * Is it possible to somehow make all admin functions go through
         * some kind of Admin class that will check automatically?
        */
        $isLogged = $this->session->userdata('is_logged_in');

        if ($isLogged == true)
        {
            $this->load->view('admin/item/main');
        }
        else
        {
            $this->load->view('admin/login');
        }
    }

    function Add()
    {
        $this->load->view('admin/item/add');
    }

    function Edit()
    {
        $this->load->view('admin/item/edit');
    }

    function Delete()
    {
        $this->load->view('admin/item/delete');
    }
}

我希望这是一个简单的问题,提前谢谢:)

3 个答案:

答案 0 :(得分:1)

我将在CI_Controller中实现login-function。 然后我会在Item protected $loginRequired = true;中设置一个受保护的变量。

在函数__construct()或Item()中,我会调用parent::isLoginRequired($this->loginRequired)来检查是否需要登录。

我还会重定向到具有参数的特定登录页面,该参数会将用户重定向回他需要登录的页面。

答案 1 :(得分:1)

创建一个新类,例如,My_Controller扩展Ci_Controller并在其中编写一些auth checker代码...在控制器文件中只需扩展My_Controller

答案 2 :(得分:0)

我通常做的是 - 像Teeed推荐 - 创建我自己的控制器类,它位于CI_Controller和你可能创建的每个控制器之间。

在该类(MY_Controller)中,您可以实例化一个处理所有用户相关数据和逻辑的模型(加载会话数据,执行特定检查等),最后将这些结果设置为类变量,这样您最终会拥有:

$this->isLogged ; $this->isPaying ; $this->isPlatinumMember ; 等。

在从MY_Controller

扩展的任何类中

可以很容易地检查任何控制器中的任何条件。