Мне интересно, как запретить авторизованным пользователям просматривать и изменять другие ресурсы пользователей.Как запретить авторизованным пользователям просматривать или изменять ссылки?
Например, допустим, у меня есть ссылка http://something.com/dashboard/show_data/34. Теперь, как помешать мне написать что-то вроде http://something.com/dashboard/show_data/75 в адресной строке браузера и просмотреть эту страницу, хотя я не уполномочен просматривать этот ресурс, потому что он принадлежит другому пользователю? Проблема также в структуре кода, потому что я хочу показать список, даже если он пуст. Несанкционированный пользователь не может видеть данные, но страница все равно отображается. Я хочу, чтобы страница не отображалась, если она доступна не авторизованному пользователю. Query возвращает null для пустого списка и неавторизованного пользователя. Как дифференцировать, если это пустой список или неавторизованный пользователь?
Выполнял ли я запрос на определенные параметры или сам код?
Кроме того, у меня есть функция, которая принимает идентификатор данных (34 и 75) и показывает данные пользователей.
public function __construct()
{
parent::__construct();
Authenticate::handleLogin(); //checks if $_SESSION['user_logged_in'] is set
}
public function show_list($list_id)
{
if (isset($list_id)) {
//how to change this code so unauthorized users cant get this rendered view
$task_model = $this->loadModel('TaskModel');
$tasks = $task_model->showTasks($list_id);
$this->view->tasks = $tasks;
$this->view->render('task/task');
} else {
header('location:' . URL . 'dashboard/index');
}
}
//in model
public function showTasks($list_id)
{
if (isset($_GET['sort_task']) and !empty($_GET['sort_task'])) {
$sort_parameter = strip_tags($_GET['sort_task']);
$sort_order = $this->sortData($sort_parameter);
$sort_order = 't.task' . $sort_order;
} else {
$sort_order = 't.task_name';
}
$sql = "SELECT t.task_name, t.task_id, t.task_priority, t.task_deadline, t.task_completed, l.list_id
FROM task AS t
LEFT JOIN list AS l ON l.list_id = :list_id AND l.list_id = t.list_id
WHERE l.user_id = :user_id
ORDER BY $sort_order";
$query = $this->db->prepare($sql);
$query->execute(array(':list_id' => $list_id, ':user_id' => $_SESSION['user_id']));
return $query->fetchAll();
}
Ну, если пользователь авторизован или, скорее, аутентифицирован, вы знаете, кто он. Вы можете основывать свое решение на показе контента в этом помещении. – Rangad
Да, но запросы раздуваются и трудно читаются (я должен был бы сделать это для каждого запроса, имеющего деловые отношения с данными). Мне интересно, есть ли более простое решение. Я не могу понять что-либо сделать в функциональном коде. – 3ND
«Раздутый» довольно расплывчатый. Без информации о том, как вы обрабатываете аутентификацию и разрешения, и по каким параметрам вы определяете, что пользователь имеет доступ к определенному ресурсу, ваш вопрос очень широк. – Rangad