开发者

All admin/user functions checking if he/she is logged in - How to avoid this?

I am very, very new with MVC (just started yesterday) so this question is probably stupid, but I need to know how to check automatically if user is logged in on my functions that are in admin/user models.

I can put the checking in constru开发者_如何学运维ct, this would help, but I have several models and maybe there is some even better way. I hope you will understand better what I want after you see my folder structure and code. Oh, and by the way - I use Code Igniter 2.0

Folders:

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

Let's see my item.php file...

<?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');
    }
}

I hope that this is easy question, thanks in advance :)


I would implement the login-function in CI_Controller. Then I would set an protected variable in Item protected $loginRequired = true;.

In function __construct() or Item() I would call parent::isLoginRequired($this->loginRequired) which checks if a login is required.

I would also redirect to a specific login page with a parameter which redirects the user back to the page he needs to be logged in.


Make a new class, for example, My_Controller extends Ci_Controller and write some auth checker code in it... in controller file just extend My_Controller


what i usually do is -like Teeed recommends- Create my own controller Class which is between the CI_Controller and each controller you might create.

In that class (MY_Controller) you can instantiate a model which handles all user related data and logics (loading session data, executing specific checks, etc..) and finally set as class variables those results, so you will end up having:

$this->isLogged ; $this->isPaying ; $this->isPlatinumMember ; etc..

in any of your classes extending from MY_Controller

that makes very easy to check any condition within any of your Controllers.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜