Bonjour à tous,
Lors de la suppression d'un Evenement, j'aimerai autoriser cette action si l'utilisateur est l'auteur de l'evenement ou si l'utilisateur est administrateur.
Avec le code ci-dessous :
$evenement=$this->Evenement>find('first', array(
'conditions'=>array(
'Evenement.id'=>$id,
'OR' => array(
'Evenement.user_id'=>$this->Auth->user('id'),
$this->Session->read('Auth.User.role') => 'admin'
)
)
));
j'ai le retour d'erreur suivant :
Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'admin' in 'where clause'
SQL Query: SELECT Evenement
.id
, Evenement
.name
, Evenement
.slug
, Evenement
.user_id
, Evenement
.category_id
, Evenement
.date_event
, Evenement
.hour_start
, Evenement
.hour_end
, Evenement
.content
, Evenement
.address
, Evenement
.address_lat
, Evenement
.address_long
, Evenement
.address_city
, Evenement
.address_country
, Evenement
.created
, Evenement
.modified
FROM evement
.evenements
AS Evenement
WHERE Evenement
.id
= 42 AND ((Evenement
.user_id
= 30) OR (admin
= 'admin')) LIMIT 1
Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp
Je comprends l'erreur retournée, mais ne sais pas comment modifier mon code.
Pourriez vous m'éclairer ? Merci
Raphaël
Bonjour.
C'est normal que tu aies cette erreur.
Dans tes conditions tu lui mets : admin = 'admin', le premier doit être le nom du champ et non la valeur d'une variable de session.
Si tu relis le retour SQL, il te le précise bien :
Unknown column 'admin' in 'where clause'
Ce qui veut bien dire que tu n'as aucun champ dans la table qui se nomme admin.
Nous ne pouvons pas trop t'aider sans en savoir un peu plus.
D'après une petite analyse logique, je ferais de cette manière.
$evenement = $this->Evenement>find('first', array('conditions'=>array('Evenement.id'=>$id, 'Evenement.user_id'=>$this->Auth->user('id')));
if ($evenement || $this->Session->read('Auth.User.role') == 'admin') {
$this->Evenement->delete($id);
$this->Session->flash('Yahhooo !');
} else {
$this->Session->flash('NOOOONNN !');
}
return $this->redirect('action' => 'index');
Voilà, un truc plutôt simple, si la requête retourne un résultat avec la condition de si l'utilisateur est l'auteur de l'évènement ou s'il à le role admin dans la session, la suppresion s'effectue avec un message de succes, sinon on lui retourne une erreur au lieu d'un message d'erreur.
P.S. :C'est un exemple rapide, il y a plus élaboré bien sur.