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
- Chaque plat retient désormais son créateur (
Plat::$createur, déjà mappé). DansnouveauPlat(), donnez au nouveau plat l'employé connecté pour créateur. - Écrivez
PlatVoter, qui décide de l'attributPLAT_MODIFIERsur unPlat:- personne de connecté : refusé ;
- le patron : accordé ;
- le créateur du plat : accordé ;
- tous les autres : refusé.
- 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.