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_ADMINohierarquia 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/anythingUm 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/anythingUm 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.