Вам нужно защитить свои страницы. Давайте предположим, что ваша переменная $_SESSION['email']
устанавливается только тогда, когда пользователь вошел в систему. Мы можем использовать это как флаг, чтобы определить, вошел ли пользователь в систему.
Добавьте эти функции в User_model
(убедитесь, что модель загружена автоматически).
public function is_logged() {
if (is_null($this->session->userdata('email')) {
redirect('main/login');
exit; // just in case
}
}
public function is_allowed($perm) {
$roles = $this->session->userdata('roles');
if ($roles !== 'admin' && $perm !== $roles) {
// maybe set flashdata so user knows why they were redirected
redirect('main/' . $roles);
exit; // just in case
}
}
Затем контроллер:
class Subscriber extends CI_Controller {
public function construct() {
parent::__construct();
$this->user_model->is_logged(); // can merge with below func, just make sure it is called first (!imp)
$this->user_model->is_allowed('subscriber');
}
public function subscriber() {
$this->load->view('header', $data);
$this->load->view('dashboard/subscriber', $data);
$this->load->view('footer');
}
}
Это так же просто, как и получается. Вы можете сделать это более модным, если хотите. Я лично использую систему ACL на основе базы данных.
Также рассмотрите возможность переименования roles
в просто role
в вашей БД и в других местах, это сбивает с толку, учитывая, что у пользователя только 1 роль (учитывая ваш предыдущий вопрос).