2013-12-21 2 views
1

У меня есть функция UserController:saveUserAction(). Эта функция используется во всей моей системе. КОГДА необходимо создать или изменить пользовательское устройство. Это может произойти из трех мест:Symfony2> Использовать контекст безопасности в общедоступном маршруте (возможная альтернатива)

1) Панель администратора → Администрирование пользователей (администратор системы может создавать/изменять пользователей).
2) Панель приборов пользователя → Мои данные (Пользователь может редактировать свои данные).
3) Регистрация (для них могут быть зарегистрированы пользователи, не являющиеся пользователями, и для них создается пользователь).

Теперь есть определенные поля, которые могут быть установлены только администратором, например USER_ROLE. (Я не хочу, чтобы кто-то регистрировал «взламывание» системы и подписывался как администратор). Обычно if ($this->get('security.context')->isGranted('ROLE_ADMIN')) работает отлично, чтобы определить, является ли пользователь является администратором, но, видя, как путь к saveUser() является публичным (для того, чтобы facilicate общественных регистраций), я получаю ошибку:

The security context contains no authentication token. One possible reason may be that there is no firewall configured for this URL.

Есть ли способ для пользователя контекст безопасности на общедоступном маршруте или есть какая-то альтернатива, кроме проверки вручную того, какие роли у зарегистрированного пользователя (если какой-либо зарегистрированный пользователь), поскольку это довольно громоздко, как видно из Symfony2 > Easier way to determine access

ответ

1

Я нашел решение. Я поместил маршрут под своим брандмауэром и поместил исключение в security.yml, что конкретный маршрут аутентифицирован анонимно. :)

Смежные вопросы