У меня в моей БД разные роли пользователя. Когда пользователь регистрируется, он может вставлять в БД более одной роли. Но когда я сохраняю его в сеансе, он сохраняет только одну роль. В некотором примере у пользователя есть 2 роли - ученик и клиент, но он отображается только как ученик.Как заставить пользователя иметь более одной роли в сеансе
Мой контроллер Войти является:
<?php
class Home extends CI_Controller {
//some code
public function login()
{
\t $this->load->model('user_model');
$user=$this->user_model->login();
if(count($user) > 0) \t
{
$this->load->library('session');
$data = array(
'username' => $user['username'],
'user_id' => $user['user_id'],
'is_logged_in' => TRUE
);
$this->session->set_userdata($data);
$user_role=$this->user_model->user_role();
$role=$this->session->set_userdata($user_role);
$user_role = $this->session->userdata('role_id');
if($user_role == 1)
{
redirect('student/index');
}
//and so on for other roles
}
}
}
В моей модели я использую "row_array". Если я использую result_array(), есть уведомление: «undefined index username, user_id в Controller». Моя модель:
public function login()
{
\t
$this->db->where('username', $this->input->post('username'));
$this->db->where('password',sha1($this->input->post('password')));
$result=$this->db->get('users');
\t \t
\t \t return $result->row_array();
\t \t \t
}
public function user_role()
{
$this->db->select('role_id');
$this->db->where('user_id', $this->session->userdata['user_id']);
$result=$this->db->get('user_roles');
return $result->result_array();
}
Вам либо нужно, чтобы '$ user_role' был массивом всех ролей, которые у пользователя есть, либо вы можете определить свои роли по степеням двух и использовать побитовые операторы на них. Итак, student = 1, teacher = 2, admin = 4, как admin, так и teacher = 2 + 4 = 6. Тогда 'if ($ user_role & 1)' (note single &) будет true, если бит студента установлен для этого пользователь. Наверное, проще использовать массив. – Jerry
user_role [] - массив. Я использую их таким образом student = 1, teacher = 2, customer = 3 и так далее. Я перенаправляю их на соответствующие страницы, но моя идея заключается в том, что вы одновременно регистрировались как учитель и клиент, вы должны видеть страницы как для студентов, так и для клиентов. Я сделал это в БД - разные роли пользователя видят разные страницы, но в моем проекте этот пользователь отображается только как учащийся в сеансе. –
Можете ли вы рассказать, почему вы должны хранить роли в сеансе? возможно, мы сможем найти другое решение. – lyhong