Codeigniter: управление правами входа в систему с наследованием - PullRequest
2 голосов
/ 26 октября 2011

Я хочу выполнить вход в систему с моим проектом codeigniter.

Некоторые соображения:

1) Существуют два внешних контроллера, которые не требуют аутентификации.Один для информации (splash_pages и тому подобное), а другой для создания сеанса, вошедшего в систему.

2) Все остальные контроллеры наследуются от главного контроллера, который, как часть его конструктора, требует, чтобы вы вошли в систему иливыводит вас на экран входа в систему.

Пока что вышеприведенные 2 отлично работают для входа в систему и выхода из системы.

В терминах кода:

Главный контроллер, которым я былописание для 2) Это находится в папке Core Codeigniter

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('cart');
        $this->load->library('session');
        $this->load->helper('form');
        $this->load->library('form_validation');
        if (!$this->session->userdata('loggedin')){
            redirect('/sessions/log_in/','refresh');
        }
    }

Класс, использующий систему входа в систему:

class Records extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('some_model');
        $this->load->library('some_library');
    }

Идея состоит в том, что при построении объекта он будет проверять,пользователь вошел в систему или нет, и либо правильно построил объект, либо перенаправил на экран входа в систему.

Однако потребности проекта немного изменились.В настоящее время требования гласят, что существует около 6 различных групп пользователей, чьи привилегии могут быть организованы в подмножества.A может сделать I, B может сделать A + II, C может сделать B + III и так далее.Были небольшие намеки на то, что могут быть привилегии, которые не являются строго подмножествами (только IE может выполнить задачу IV), но это еще не подтверждено, поэтому я хочу оставить свои настройки открытыми.

Как яПредполагается, что это будет иметь кучу контроллеров из MY_Controller, которые наследуются от MY_Controller.

Например, в папке Core:

class MY_AsController extends MY_Controller {
    public function __construct(){
        parent::__construct();
        $accountType = $this->session->userdata('accountType');
        if(!($accountType == declaredConstant)){
            redirect('/someController/someMethod','refresh');
        }
    }

Затем в папке контроллеров:

class AControlPage extends MY_AsController {
     //Insert page functions that only As have access to here
}

К сожалению, применение его на практике не вызывает никаких ошибок, только пустая страница.Я не уверен, что после этого.

1 Ответ

1 голос
/ 27 октября 2011

Закончилось тем, что не изменился родительский конструктор или вообще не использовалось больше наследования:

Добавлено следующее в My_Controller:

public function allowedToView($userAccountType, $requiredAccountTypes){
    //If user not in allowed userGroup
    if(!(in_array($userAccountType,$requiredAccountTypes))){
        redirect('/sessions/not_allowed/','refresh');
    }
}

Изменен дочерний конструктор на:

public function __construct() {
    parent::__construct();
    $accountType = $this->session->userdata('accountType');
    $allowedTypes = array(declaredConstant1,declaredConstant2,...);
    $this->allowedToView($accountType,$allowedTypes);
}

Спасибо, Джозеф, за понимание, которое уводит меня от моего безумия!

...