Проблема с каскадными ролями в 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

Другие вопросы по тегам