J'ai ceci dans mon contrôleur.CakePHP: Méthode correcte pour supprimer un enregistrement en toute sécurité
public function delete($id) {
if($this->request->is('get')) {
throw new MethodNotAllowedException();
}
$this->Memberlist->id = $id;
if (!$this->Memberlist->exists()) {
throw new NotFoundException(__('Invalid list.'));
}
if ($this->Memberlist->delete()) {
$this->Session->setFlash(__('List deleted.'), 'success');
return $this->redirect(array('action'=>'index'));
}
$this->Session->setFlash(__('List was not deleted.'), 'error');
return $this->redirect(array('action'=>'index'));
}
Mon modèle ressemble à ceci: (belongsTo)
<?php
class Memberlist extends AppModel {
public $name = 'Memberlist';
public $belongsTo = array(
'Account' => array(
'className' => 'Account',
'foreignKey' => 'account_id'
)
);
Dans un de mes vues, j'ai quelque chose comme ceci:
echo $this->Form->postLink('Delete',
array('action' => 'delete', $list['Memberlist']['id']),
array('class'=>'btn-mini btn', 'confirm' => 'Are you sure?'));
Ce qui crée un HTML comme ceci:
<form id="post_4fe15efc0d284" method="post" style="display:none;" name="post_4fe15efc0d284" action="/Grid/memberlists/delete/9">
<input type="hidden" value="POST" name="_method">
<input id="Token1627936788" type="hidden" value="8756f7ad21f3ab93dd6fb9a4861e3aed4496f3f9" name="data[_Token][key]">
<div style="display:none;">
</form>
<a class="btn-mini btn" onclick="if (confirm('Are you sure?')) { document.post_4fe15efc0d284.submit(); } event.returnValue = false; return false;" href="#">Delete</a>
Le problème est que quand je mets à jour le ID
trouvé dans action="/Grid/memberlists/delete/9"
en utilisant Firebug (ou n'importe quel outil de développement), je peux pratiquement tout effacer! Même à partir d'un compte différent. Même si le composant de sécurité est activé.
Quelle serait la bonne façon de procéder? Je pense à vérifier le account_id
par rapport au account_id de l'utilisateur actuellement connecté. Mais je suis juste curieux de savoir si CakePHP a quelque chose d'out-of-the-box qui résout ce problème?
Je suis nouveau à CakePHP et a trouvé cette réponse pour être très simple à mettre en œuvre. Il a également fait beaucoup de sens de le faire dans le modèle. – wenbert