Chacun ses plats

Exercice 4 sur 6 du chapitre 4 · 220 XP · 5 objectifs vérifiés par des tests

Notions abordées : VoterIsGranted avec sujetCurrentUser

Lugh, un nouveau cuisinier, a « amélioré » la tourte de Bruna en y ajoutant des anchois. Bruna est furieuse. Nouvelle règle en cuisine : chacun ses plats. Un cuisinier ne modifie que les plats qu'il a inventés, et le patron peut tout modifier.

Un rôle ne suffit plus : le droit dépend de l'objet (ce plat-là) et de qui le demande. C'est le travail d'un Voter.

Votre mission

  1. Chaque plat retient désormais son créateur (Plat::$createur, déjà mappé). Dans nouveauPlat(), donnez au nouveau plat l'employé connecté pour créateur.
  2. Écrivez PlatVoter, qui décide de l'attribut PLAT_MODIFIER sur un Plat :
    • personne de connecté : refusé ;
    • le patron : accordé ;
    • le créateur du plat : accordé ;
    • tous les autres : refusé.
  3. Protégez modifierPlat() avec ce voter, et n'affichez « Modifier » sur la fiche que si l'on a le droit de modifier ce plat.

Les plats historiques de la carte n'ont pas de créateur : seul le patron peut les modifier.

Rappel

Un voter répond à deux questions : « est-ce que je m'occupe de ça ? » (supports) et, si oui, « est-ce autorisé ? » (voteOnAttribute). Symfony interroge tous les voters. Celui qui ne se sent pas concerné s'abstient.