Ответ 1
Давайте рассмотрим самый простой пример: приложение Blog (снова).
При создании приложения для блога вам часто требуется аутентифицировать пользователей и разрешать им выполнять определенные действия, например:
- авторизуйте Боба, чтобы добавить нового участника в блог
- разрешить Алисе создать новое сообщение в блоге
- разрешить Алисе редактировать собственное сообщение в блоге
- разрешить Бобу удалять сообщение в блоге Алисы
Что такое роль
Роль представляет набор разрешений, жестко закодированных в вашем приложении. Когда вы проверяете, разрешено ли пользователю добавлять нового участника в блог, ваш код проверяет, имеет ли текущий пользователь роль "ROLE_ADMIN".
Вот почему Бобу (он имеет ROLE_ADMIN) разрешено добавлять Алису в качестве нового Contributor. См. Документация Symfony о безопасности/Ролях.
Что такое группа
Когда пользователь принадлежит к группе, она обычно имеет право на набор ролей. Алиса принадлежит группе "Авторы", поэтому у нее есть роли ROLE_STATS (она разрешала видеть статистику блога) и ROLE_POST (она разрешала публиковать новую запись в блоге).
Опять же, эта концепция не жестко закодирована в Symfony, но разработчики обычно так думают. См. некоторый бит для управления ролями в базе данных с группами.
Списки ACL
Списки управления доступом полезны, когда вам необходимо принять решение о авторизации на основе в роли + объект домена.
Алисе разрешено редактировать записи в блогах, написанные ею только. Чтобы проверить это разрешение, вам нужны Alice Roles и модель Post, которую она пытается редактировать. Документация по Symfony по спискам ACL также довольно понятна.
О, и Бобу разрешено редактировать все записи в блоге, потому что у него есть ROLE_ADMIN. Решение здесь основано только на роли.