Codeigniter: контроль прав доступа с наследованием

Я хочу сделать log-входы с моим проектом 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 B может выполнять задачу 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 } 

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

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

В 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); } 

Спасибо, Джозеф за то, что я убедил меня от сумасшествия!