Проблема с каскадными ролями в symfony3 и сонате пользователя
Мои роли определены следующим образом:
security:
role_hierarchy:
ROLE_PROFESSIONAL_SERVICES_MANAGER: [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_BRANCH_ASSISTANT]
Когда я пытаюсь проверить разрешения в моем контроллере, как показано ниже:
if($securityContext->isGranted('ROLE_PROFESSIONAL_SERVICES_MANAGER'))
Возвращает false, потому что в профилировщике разрешения, похоже, были сохранены, как показано ниже:
"ROLE_PROFESSIONAL_SERVICES_MANAGER: ROLE_USER, ROLE_SONATA_ADMIN, ROLE_BRANCH_ASSISTANT"
Кто-нибудь знает, как я могу решить это?
1 ответ
Роли для пользователей, а не приложения.
С помощью своего кода вы определяете, что пользователь с ролью ROLE_PROFFESSIONAL_SERVICES_MANAGER
будет иметь роли ROLE_USER, ROLE_SONATA_ADMIN
а также ROLE_BRANCH_ASSISTANT
,
Но теперь вам нужно назначить эту роль пользователю и войти в него.
Когда вы звоните $securityContext->isGranted()
он получает токен от вашего текущего вошедшего в систему пользователя (который вы можете видеть в профилировщике) и проверяете роли этого пользователя из токена.
Таким образом, вы должны иметь пользователя с соответствующей ролью, вошедшей в систему.
Если вы уже используете SonatAUserBundle или FOSUserBundle, используйте эту команду, чтобы легко создать пользователя: bin/console fos:user:create
Затем назначьте ему соответствующие роли:
app/console fos:user:promote nameOfYourUser ROLE_PROFFESSIONAL_SERVICES_MANAGER
Если в вашем приложении нет системы управления пользователями, посмотрите здесь: https://sonata-project.org/bundles/admin/master/doc/reference/security.html