Я относительно новичок в 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();
}
В вашем контроллере редактирования пользователя вы должны проверить, соответствует ли имя пользователя, которое вошло в систему (хранится в переменной $ _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');
...
Других решений пока нет …