Как запретить пользователю доступ к определенным страницам, если не войти в систему с помощью codeigniter - PullRequest
0 голосов
/ 05 ноября 2018

В настоящее время, если я получил доступ к основному / подписчику, я могу просматривать страницу, когда не вошел в систему, я создал функцию в главном контроллере - обратитесь к Для перенаправления страницы роли пользователя кодовый указатель для ясности кода.

public function subscriber() {

    $this->load->view('header', $data);
    $this->load->view('dashboard/subscriber', $data);
    $this->load->view('footer');
    }

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Если вы хотите запретить пользователю доступ к определенным страницам, если вы не вошли в систему codeigniter,

Вы должны сначала set_userdata при входе в систему.

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

public function subscriber()
    {
        if($this->session->userdata('id')!="")
        {
            $this->load->view('header', $data);
            $this->load->view('dashboard/subscriber', $data);
            $this->load->view('footer');

        } else {
            //your code here
        }           
    }
0 голосов
/ 05 ноября 2018

Самый простой способ защитить ваши разные маршруты на основе пользователя - залогинен или нет, используйте переменную сеанса. когда пользователь вошел в ваше приложение, установите переменную sessio, например,

$this->session->set_userdata('is_logged_in', TRUE);

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

class Demo_controller extends CI_Controller{
 public function __construct(){
   parent::__construct();
   // check if user is logged in
   if(!$this->session->userdata('is_logged_in')){
     // user is not logged in then redirect user to any page you want
   }
 }
}

вы также можете использовать хуки для создания такой системы в Codeigniter

0 голосов
/ 05 ноября 2018

Вам нужно защитить свои страницы. Давайте предположим, что ваша переменная $_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 роль (учитывая ваш предыдущий вопрос).

...