【问题标题】:Managing two roles in codeigniter在 codeigniter 中管理两个角色
【发布时间】:2014-11-24 00:04:32
【问题描述】:

我有两个角色,管理员和老师。管理员和教师帐户可以登录,但是当我登录教师帐户时,它会重定向到管理页面。我不知道我的代码是否也正确。我是使用 codeigniter 的新手,所以请多多包涵。

这是我的控制器:

public function login_validation(){

  $this->load->library('form_validation');


  $this->form_validation->set_rules('idnum', 'ID Number', 'required|trim|xss_clean|callback_validate_credentials');
  $this->form_validation->set_rules('password', 'Password', 'required|md5|trim');

  if ($this->form_validation->run()){
     //$this->load->model('model_users');
     $this->load->model('model_role');
     $data = array(
           'login_id' => $this->input->post('idnum'),
           'is_logged_in' => 1,
             'role' => $this->model_role->scalar('user_account','role')

        );

     $this->session->set_userdata($data);
     redirect('site/members'); 
  } else {
     $data['title'] = "Outcome-based Education";

     $this->load->view("index/header", $data);
     $this->load->view("index/view_home");
     $this->load->view("index/footer");
  }
}

public function members(){

  if($this->session->userdata('is_logged_in') && $this->session->userdata('role', 'admin')){
     $this->load->view('login/admin');
  }  elseif($this->session->userdata('is_logged_in') && $this->session->userdata('role', 'teacher')){
     $this->load->view('login/members');
  } 

     else{  
     redirect('site/restricted');
  }
}

这是我的模型:

public function can_log_in(){

        $this->db->where('login_id', $this->input->post('idnum'));
        $this->db->where('password', md5($this->input->post('password')));

        $query = $this->db->get('user_account');

        if($query->num_rows() == 1){
            return true;
        } else{
            return false;
        }
    }

【问题讨论】:

  • 那么,您的问题是什么? :)

标签: php codeigniter


【解决方案1】:

在您的成员函数中,您实际上并没有检查角色会话数据的值,您只是检查它是否存在。你需要改变:

if($this->session->userdata('is_logged_in') && $this->session->userdata('role', 'admin')){

到:

if($this->session->userdata('is_logged_in') && $this->session->userdata('role') == 'admin'){

如您所见,只有 1 个参数可以传递给 $this->session->userdata() 函数:

/**
 * Fetch a specific item from the session array
 *
 * @access  public
 * @param   string
 * @return  string
 */
function userdata($item)
{
    return ( ! isset($this->userdata[$item])) ? FALSE : $this->userdata[$item];
}

【讨论】:

  • 感谢您的回复。你回答的那个确实有效。再次感谢。
【解决方案2】:

当您执行登录操作时,从您调用模型的 can_log_in() 方法的位置,即使您加载模型但您只调用 $this->model_role->scalar('user_account','role') 方法您只给出“admin”参数结果作为响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多