Symfony2: Как войти в систему с помощью OAuth (HWIOAuthBundle) + пользовательские роли (по умолчанию и загружаются из БД)

Примечание: вопросы находятся в конце этого текста, но я объясню подробно весь контекст для лучшего понимания.

Я разрабатываю приложение Symfony2, состоящее из 3 модулей:

Модуль для студентов -> Нужна рольROLE_STUDENTМодуль для учителей -> Нужна рольROLE_TEACHERМодуль для администраторов -> Нужна рольROLE_ADMIN

ролевая иерархия составляет:

ROLE_TEACHER: [ROLE_STUDENT]ROLE_ADMIN: [ROLE_TEACHER]

Следовательно:

Только учащийся (с ролью ROLE_STUDENT) может получить доступ ко всем страницам своего модуля, например:

http://server.com/students/anything

Учитель (с ролью ROLE_TEACHER) может получить доступ ко всем страницам модуля учащихся и всем страницам модуля учителя, например:

http://server.com/students/anythinghttp://server.com/teachers/anything

Администратор (с ролью ROLE_ADMIN) может получить доступ ко всем страницам модуля учащихся, всем страницам модуля учителя и бэкэнда администратора.

Система использует OAuth для аутентификации студентов и преподавателей через Twitter, используя комплектHWIOAuthBundle (с помощьюOAuthUserProvider пользовательский провайдер, который предоставляет пакет).

Я достиг успешной аутентификации пользователей, но,по умолчанию все пользователи автоматически аутентифицируются с следующие роли:[ROLE_USER, ROLE_OAUTH_USER]

Итак, вот что я сделал. Ниже я собираюсь объяснить, что я хочу, чтобы мое приложение делало, но я не знаю, как это сделать:

Шаги для входа в систему с помощью OAuth:

Пользователь входит в систему и автоматически:

Если пользователь не существует в базе данных:
- Сохранить ник в таблице пользователей базы данных.
- Сохраните роль ROLE_STUDENT (для меня эта роль по умолчанию) в таблице пользователей базы данных.
- Авторизуйтесь в системе, используя OAuth, но используя роль ROLE_STUDENT.

Если пользователь существует в базе данных:
- Проверьте, какую роль связал пользователь в базе данных.
- Аутентифицировать пользователя в системе, используя OAuth, но используя роль, связанную с базой данных (т. Е. ROLE_STUDENT или ROLE_TEACHER).

Администратор (из административного бэкэнда) может видеть список псевдонимов (используемых Twitter, но сохраненных в базе данных) и назначенных ролей для каждого псевдонима. Администратор должен иметь возможность изменять роль пользователей между ROLE_STUDENT и ROLE_TEACHER.

Вопросы:

Как я могу аутентифицировать пользователя через OAuth (HWIOAuthBundle) с ролью, которую я хочу по умолчанию (ROLE_STUDENT, как я объяснил выше)?

Если в базе данных существует псевдоним со связанной ролью (ROLE_STUDENT или ROLE_TEACHER),Как я могу аутентифицировать пользователя через OAuth (HWIOAuthBundle), но используя роль, загруженную из базы данных?

Я много читал на эту тему, но я новичок в Symfony2, и я не знаю, как лучше и проще всего решить эту проблему.

Заранее спасибо!

PS: если у вас есть какие-либо вопросы или сомнения, я буду рад объяснить как можно лучше.

Ответы на вопрос(1)

Ваш ответ на вопрос