Codeigniter: ограничение доступа пользователя к странице собственного профиля

Я относительно новичок в Codeigniter и пытаюсь ограничить просмотр, редактирование или удаление профилей пользователей владельцем профиля. Я успешно ограничил доступ к профилям незарегистрированных пользователей с помощью другой функции. Моя проблема заключается в том, чтобы ограничить пользователя его или ее собственным профилем.

Я сделал URL-адреса для использования имен пользователей, которые в моей базе данных называются «логин». Я пытаюсь сопоставить имя пользователя из базы данных с URL-адресом.

Любые советы и информация будут полезны.

Контроллер, чтобы определить, вошел ли пользователь в систему:

public function _is_logged_user() 
{ 
$id = $this->uri->segment(3); 
$data['user_profile'] = $this->user_model->get_user_profile($id);
$logged = $this->session->userdata('user_id');
   if($id == $logged) { 
     return TRUE; 
      }  else { 
     return FALSE; 
     }  
}

Часть get_user_profile из моей user_model:

public function get($user_id = null) 
{ 

if ($user_id === null) { 
   $query = $this->db->get('user');
   } elseif(is_array($user_id)) {        
   $query = $this->db->get_where('user', $user_id);        
   } else { 
   $query = $this->db->get_where('user',['user_id' => $user_id]); 
   }         
   return $query->result_array();    
}  

person Jeffrey Teruel    schedule 01.02.2015    source источник


Ответы (1)


В вашем контроллере редактирования пользователя вы должны проверить, соответствует ли имя пользователя, вошедшее в систему (хранящееся в переменной $_SESSION), редактируемому пользователю.

В codeigniter вы можете получить доступ к этому, используя $this->session->userdata() функция

Если он совпадает, покажите форму редактирования, иначе отобразите сообщение об ошибке.

Таким образом, в вашем пользовательском контроллере редактирования у вас может быть.

if $this->_is_logged_user(){
    $data['user_profile'] = $this->user_model->get_user_profile($id);
    $this->display_edit($data);
} 
else{
    $this->display_error();
}

Я, вероятно, не стал бы извлекать пользовательские данные в функции _is_logged_user()

public function _is_logged_user() 
{ 
    $id = $this->uri->segment(3); 
    // no need for the line below, we're not using the data here
    // $data['user_profile'] = $this->user_model->get_user_profile($id);
    $logged = $this->session->userdata('user_id');
    ...
person Loopo    schedule 01.02.2015
comment
Спасибо за вашу помощь. Чтобы заставить это работать, я пошел и добавил новый элемент массива в сеансы. - person Jeffrey Teruel; 01.02.2015