Я хочу защитить определенные методы в моем приложении, такие как публикация, отмена публикации и закрытие.Под защитой я имею в виду не авторизацию пользователя, а скорее способность вызывать метод определенным образом.
Я думал о ФОРМИРОВАНИИ методов, вызываемых с помощью POST, а не GET, чтобы человек не могпросто вставьте URL-адрес в адрес (хотя я мог бы просто проверить идентификатор пользователя человека, который делает это).Однако это означает оборачивание каждой кнопки в отдельную форму для каждого вызова метода.
В качестве альтернативы я мог бы использовать GUID, чтобы разрешить метод GET, но удостовериться, что он позволяет только правильному человеку выполнять функцию.1006 * Есть мысли по этому поводу?
До сих пор я пытался:
function publish($id = null)
{
$post = $this->Post->find('first',array('conditions'=>array('Post.id'=>Tiny::reverseTiny($id))));
if ($this->request->is('post') || $this->request->is('put'))
{
$this->Post->id = $post['Post']['id'];
$this->Post->saveField('status', 1);
$this->Session->setFlash('Your post has been published!');
$this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($post['Post']['id'])));
}
else
{
die('GET METHOD NOT ALLOWED');
}
}
Но, как указано выше, это означает, что ссылка / кнопка для этого метода должна быть в форме, содержащейвызов действия к этому методу.И если у меня есть несколько методов, мне понадобятся несколько форм ...
Cheers
Один из способов, о котором я подумал, - это разрешить метод get, а затем проверить идентификатор пользователя сообщения по сравнению свошел в систему с идентификатором пользователя так:
if ($this->request->is('get'))
{
if($post['Post']['user_id'] != $this->Auth->user('id'))
{
$this->Session->setFlash('You don\'t have permission to edit that post!');
$this->redirect(array('controller' => 'posts', 'action' => 'index'));
}
else
{
$this->Post->id = $post['Post']['id'];
$this->Post->saveField('status', 1);
$this->Session->setFlash('Your post has been published!');
$this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($post['Post']['id'])));
}
}
Это хорошая практика?