Я пытаюсь изучить роли и безопасность Symfony. Мой текущий файл security.yml выглядит так:
role_hierarchy:
ROLE_USER: ROLE_DO_ALMOST_NOTHING
ROLE_EDITOR: [ ROLE_USER, ROLE_ALLOWED_TO_EDIT ]
ROLE_CONTRIBUTOR: [ ROLE_EDITOR, ROLE_ALLOWED_TO_CONTRIBUTE ]
ROLE_ADMIN: [ ROLE_CONTRIBUTOR ]
ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_DO_ANY_THING ]
access_control:
- { path: ^/admin, roles: ROLE_USER }
- { path: ^/admin/editor, roles: ROLE_ADMIN }
- { path: ^/editor, roles: ROLE_EDITOR }
- { path: ^/contributor, roles: ROLE_CONTRIBUTOR }
- { path: ^/super, roles: ROLE_SUPER_ADMIN }
И я использую эту настройку для своих пользователей:
providers:
in_memory:
memory:
users:
person:
password: password!
roles: 'ROLE_USER'
admin:
password: password2
roles: 'ROLE_ADMIN'
Вот моя проблема. Мне не хватало части безопасности access_control, однако путь ^/admin/editor
с ролями, отмеченными как ROLE_ADMIN, позволит пользователю получить доступ к маршруту, даже если у этого пользователя не было роль ROLE_ADMIN. Мне было интересно, связано ли это с тем, что сам маршрут используется тем же контроллером, что и маршрут ^admin
? Или заставил кого-то увидеть, где я мог ошибиться с кодом, поскольку пользователь может получить доступ к маршруту, а я им не должен.
Остальные маршруты:
- { path: ^/editor, roles: ROLE_EDITOR }
- { path: ^/contributor, roles: ROLE_CONTRIBUTOR }
- { path: ^/super, roles: ROLE_SUPER_ADMIN }
Работайте как положено.