Ограничение доступа, когда пользователь изменяет ссылку напрямую Cakephp
Я действительно новичок в CakePHP. Я хочу знать, как запретить пользователю открывать такие страницы, как "Пользователи", например, когда пользователь изменяет URL-адрес. Ну, я не умею рассказывать о своих проблемах, так что вот:
например: идентификатор пользователя равен 1, поэтому, когда он просматривал свои собственные данные, это должно быть что-то вроде users/view/1, но я не хочу, чтобы этот пользователь просматривал пользователя # 2, когда он изменяет URL на users/view/2. Я надеюсь, что вы поняли. Заранее спасибо!
2 ответа
При условии, что у вас есть текущая версия в пользовательском хранилище данных где-то в сеансе. идея состоит в том, чтобы сравнить его с переданным идентификатором в URL
---- в вашем UsersController.php
public function view($id){
if($this->Session->read('User.id') != $id ){
// cannot continue...
// possibly redirect....
}
}
Решение можно найти через Google: http://www.dereuromark.de/2011/10/05/common-cakephp-problems-and-solutions/
По сути, вы получаете текущий идентификатор из сессии:
$uid = $this->Session->read('Auth.User.id');
И сравните это с записью, которую вы просматриваете / редактируете. Если они не совпадают, вы генерируете NotAllowedException().
Подсказка: не добавляйте идентификатор для редактирования / просмотра и т. Д., Если это собственный профиль пользователя или если его может просматривать только владелец. Таким же образом, как вы получаете вышеуказанный идентификатор для проверки, вы также можете использовать этот идентификатор пользователя сеанса, чтобы получить правильную запись в первую очередь.
Кроме того, не помещайте идентификатор в представление (формы) - даже как скрытое поле - но вставляйте его в массив данных перед сохранением / проверкой.
Вы также можете увидеть текущую реализацию CakePHP 2.4 здесь - которую также можно увидеть / протестировать в режиме реального времени через соответствующий веб-сайт.