Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CodeIgniter - How to check session to be used at every methods

Let say at my controller named Book, I have many methods, such as get_book(); read_book(); remove_book();

No methods in the class can be used without user logged in, and I can get the user_id from session.

My question is, what is/are the best ways to check the if the user_id session is set so that I can use the methods?

As for now I am thinking of creating a is_logged_in() method, and apply it to every methods with an if-else statement, like

if($this->is_logged_in()
{
   //do something
}
else
{
   //redirect to home
}  

Isn’t it long and tedious? Is there an ultimate way to achieve this?

I read the link

codeigniter check for user session in every controller

But it seems that I still have to apply the is_logged_in check at every methods.

Thank you for helping me!

like image 908
user826224 Avatar asked Nov 24 '11 15:11

user826224


1 Answers

Create a file called MY_controller.php (the prefix can be edited in config file) in /application/core:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Controller extends CI_Controller {


    function __construct()
    {

        parent::__construct();

        //Initialization code that affects all controllers
    }

}


class Public_Controller extends MY_Controller {

    function __construct()
    {
        parent::__construct();

        //Initialization code that affects Public controllers. Probably not much needed because everyone can access public.
    }

}

class Admin_Controller extends MY_Controller {

    function __construct()
    {
        parent::__construct();
        //Initialization code that affects Admin controllers I.E. redirect and die if not logged in or not an admin
    }

}

class Member_Controller extends MY_Controller {

    function __construct()
    {
        parent::__construct();

        //Initialization code that affects Member controllers. I.E. redirect and die if not logged in
    }

}

Then anytime you create a new controller, you decide what access it requires

    class Book extends Member_Controller {

        //Code that will be executed, no need to check anywhere if the user is logged in. 
        //The user is guaranteed to be logged in if we are executing code here.

//If you define a __construct() here, remember to call parent::__construct();
    }

This cuts code duplication a lot, since if you need another member controller other than Book you can just extend the Member_Controller. Instead of having to do the checks in all of them.

like image 109
Esailija Avatar answered Oct 12 '22 02:10

Esailija