Symfony2: Como fazer o login usando o OAuth (HWIOAuthBundle) + funções personalizadas (por padrão e carregadas do banco de dados)

Nota: as perguntas estão no final deste texto, mas vou explicar em detalhes todo o contexto para uma melhor compreensão.

Estou desenvolvendo uma aplicação Symfony2 composta por 3 módulos:

Módulo para estudantes -> Precisa do papelROLE_STUDENTMódulo para professores -> Precisa do papelROLE_TEACHERMódulo para administradores -> Precisa do papelROLE_ADMIN

ohierarquia de papéis é o seguinte:

ROLE_TEACHER: [ROLE_STUDENT]ROLE_ADMIN: [ROLE_TEACHER]

Assim sendo:

Um aluno (com função ROLE_STUDENT) só pode acessar todas as páginas do seu módulo, por exemplo:

http://server.com/students/anything

Um professor (com a função ROLE_TEACHER) pode acessar todas as páginas do módulo dos alunos e todas as páginas do módulo dos professores, como:

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

Um administrador (com função ROLE_ADMIN) pode acessar todas as páginas do módulo dos alunos, todas as páginas do módulo dos professores e o back-end do administrador.

O sistema usa o OAuth para autenticar alunos e professores pelo Twitter, usando o pacoteHWIOAuthBundle (usando oOAuthUserProvider provedor do usuário que fornece o pacote).

Consegui autenticar usuários com sucesso, masPor padrão, todos os usuários são autenticados automaticamente com as seguintes funções:[ROLE_USER, ROLE_OAUTH_USER]

Então aqui está o que eu fiz. Abaixo, vou explicar o que quero que meu aplicativo faça, mas não conheço o caminho:

Etapas para o login usando o OAuth:

Um usuário efetua login no sistema e automaticamente:

Se o usuário não existir no banco de dados:
- Salve o apelido na tabela de usuários do banco de dados.
- Salve o papel ROLE_STUDENT (essa é a função por padrão para mim) na tabela de usuários do banco de dados.
- Autentique-se no sistema usando o OAuth, mas usando a função ROLE_STUDENT.

Se o usuário existir no banco de dados:
- Verifique qual papel associou o usuário no banco de dados.
- Autentique o usuário no sistema usando o OAuth, mas usando a função associada no banco de dados (por exemplo, ROLE_STUDENT ou ROLE_TEACHER).

O administrador (do back-end de administração) pode ver a lista de apelidos (usados ​​pelo Twitter, mas salvos no banco de dados) e as funções atribuídas a cada apelido. O administrador deve poder alterar a função dos usuários entre ROLE_STUDENT e ROLE_TEACHER.

As questões:

Como posso autenticar um usuário por meio do OAuth (HWIOAuthBundle) com a função que desejo por padrão (ROLE_STUDENT como expliquei acima)?

Se houver um apelido no banco de dados com uma função associada (ROLE_STUDENT ou ROLE_TEACHER),Como posso autenticar um usuário por meio do OAuth (HWIOAuthBundle), mas usando a função carregada do banco de dados?

Eu tenho lido muito sobre esse assunto, mas sou novo no Symfony2 e não sei qual é a melhor e mais fácil maneira de resolvê-lo.

Agradeço antecipadamente!

PS: se você tiver alguma dúvida ou dúvida sobre qualquer coisa, eu ficarei feliz em explicar da melhor forma possível.

questionAnswers(1)

yourAnswerToTheQuestion