Я хочу сделать 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); }
Спасибо, Джозеф за то, что я убедил меня от сумасшествия!