Ik gebruik in Symfony de fosUserBundle en de KNPMenuBundle.
De fosUserBundle zorgt voor een compleet inlogsysteem compleet met userroles.
In de app/security.yml staat de access control:
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/user/, role: ROLE_BOARDMEMBER }
- { path: ^/admin/members/, role: ROLE_BOARDMEMBER }
- { path: ^/admin/, role: ROLE_ADMIN }
Als voorbeeld neem ik even de laatste regel. De gebruiker moet de ROLE_ADMIN rol hebben om de ROUTE /admin/ te kunnen raadplegen. Dit werkt allemaal prima.
Echter Wil ik mijn CSS menu welke met behulp van KNPMenuBundle vervaardigd wordt dynamisch maken.
Ik wil dus dat de menuitem/link naar de adminpagina alleen gemaakt wordt als de ingelogde gebruiker daar ook op mag komen.
Nu weet ik wel dat je van de ingelogde gebruiker zijn rollen kunt opvragen. (je krijgt dan bijvoorbeeld een array('ROLE_USER', 'ROLE_ADMIN') terug maar ik wil liever aan de hand van de ROUTES bepalen of een gebruiker dan wel of geen toestemming heeft om daar heen te gaan.
anders gezegd:
als ik weet dat de router-identifier 'admin_homepage' is
admin_homepage:
pattern: /admin
defaults: { _controller: AdminBundle:Default:index }
hoe kan ik dan de roles opvragen uit de access control voor het pad ^/admin/
Waarom ik dit wil is vrij simpel. Stel dat ik nu later een andere rol aan een pad in de access control wil koppelen dan past mijn menu zich automatisch aan.
Waarschijnlijk denk ik niet in de goede richting maar goed ik hoor graag van de Symfony gebruikers