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();
}

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');
...
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]