Devise com diferentes tipos de usuários

454 views
Skip to first unread message

Felipe Teixeira

unread,
Sep 22, 2012, 6:18:17 PM9/22/12
to rail...@googlegroups.com
Olá pessoal, estou tentando usar o Devise para fazer autenticação no meu projeto,
mas estou tendo algumas dúvidas.

No caso, eu tenho uma classe Usuário que tem duas subclasses Empresa e Cliente.
Usei o rails g devise Usuario para gerar tudo para a classe usuário, e depois usei
rails g devise:views Empresa e rails g devise:views Cliente para customizar as views
de cada tipo de usuário (porque cada classe tem seus atributos específicos, porém
o cadastro de email e senha é igual para as duas).

Feito isso, customizei as views registrations/new.html.erb de ambas as classes, e acrescentei
no routes.rb as linhas devise_for clientes e devise_for empresas, que gera as rotas certinhas
pra mim.

Até aí tudo bem, porém quando inicio a aplicação, e tento acessar /empresas/sign_up ou
/clientes/sign_up, as views que são chamadas não estão customizadas. Na verdade, elas
estão no formato padrão do próprio devise... me parece que eles estão usando as views da classe
Usuário, e não as suas respectivas views customizadas.

Alguém saberia me dizer o que está faltando, ou onde estou errando?

Agradeço desde já.


Pedro Henrique Almeida Cruz

unread,
Sep 22, 2012, 6:58:36 PM9/22/12
to rail...@googlegroups.com
Eu te aconselharia deixar o devise do modo que estava, e usar a gem cancan, do Ryan Bates, e criar os Roles Empresa e Cliente

--
------------------------
RailsDeveloperAnd > PhpDeveloper
def contact
  @nome = Pedro Henrique
  @fone = 8607-8677
end

Felipe Teixeira

unread,
Sep 22, 2012, 8:13:26 PM9/22/12
to rail...@googlegroups.com
Mas no caso, as classes Empresa e Cliente são bem diferentes, possuem atributos, métodos e relacionamentos bastante diferentes...
Não seria apenas uma questão de permitir acesso a esta ou aquela página.
Ainda assim, o Cancan seria  a melhor solução?

Pedro Henrique Almeida Cruz

unread,
Sep 22, 2012, 8:15:59 PM9/22/12
to rail...@googlegroups.com
Com certeza, da uma lida na documentação, eu ja usei isso uma vez, fica bem mais tranquilo, e tem menor chance de ter erros

Everaldo Gomes

unread,
Sep 22, 2012, 8:22:40 PM9/22/12
to rail...@googlegroups.com
Você poderia gerar dois models Devise separados, ao invés de usar herança. Se as classes são bem diferentes, seria melhor nem ter usado herança a princípio.

O que for comum às duas classes pode usar um módulo ou composição.

2012/9/22 Pedro Henrique Almeida Cruz <pedrohenr...@gmail.com>
--
Você recebeu essa mensagem porquê está inscrito no Google
Groups "rails-br".
Para enviar uma mensagem para o grupo, mande um email para rail...@googlegroups.com
Para se descadastrar, mande um e-mail para
rails-br+u...@googlegroups.com
Visite o grupo em http://groups.google.com/group/rails-br?hl=pt-BR
Leia nossa política de uso: http://goo.gl/YGgt7

Felipe Teixeira

unread,
Sep 22, 2012, 9:00:36 PM9/22/12
to rail...@googlegroups.com
Mas usando dois models devise diferentes eu consigo fazer com que o sitema de login
seja o mesmo para as duas classes? É porque eu quero que, quando o usuário logue,
o sistema determine se ele é um Cliente ou uma Empresa... não quero que eu tenha
que manter dois sitemas de login separados, entende?

Everaldo Gomes

unread,
Sep 22, 2012, 9:05:01 PM9/22/12
to rail...@googlegroups.com
Do jeito que você descreve aí parece que é caso para o CanCan. Mas não sei, você me deixou em dúvida.

Estou curioso para ver o que alguém mais experiente diz. Se eu conhecesse os requisitos do sistema tomaria uma decisão pessoal...mas o que é melhor prática nesse caso não consegui visualizar.

2012/9/22 Felipe Teixeira <felip...@gmail.com>

Everaldo Gomes

unread,
Sep 22, 2012, 9:25:50 PM9/22/12
to rail...@googlegroups.com

Mário Idival

unread,
Sep 22, 2012, 10:12:11 PM9/22/12
to rail...@googlegroups.com
bom cara, voce editou o parametro no "config/initializers/devise.rb" -> config.scoped_views = true, o padrão é false. coloca True e verifica.
--
Mário Idival

Desenvolvimento Web
Auxiliar T.I Trampolim da Vitória

Twitter : @marioigd
Facebook: mario.idival
User Linux : #554446

Felipe Teixeira

unread,
Sep 23, 2012, 10:00:17 PM9/23/12
to rail...@googlegroups.com
Bom, acho que usar o esquema de roles com associação polimórfica seria a solução, pelo que vi...
A única coisa que eu queria que fosse diferente para cada uma das classes é a tela de registro,
todo o resto do controle de sessão seria o mesmo.

No caso, eu teria um link 'Registrar como Empresa' e outro 'Registrar como Cliente' que levam
a /usuarios/sign_in, e estou pensando em usar dois partials (_campos_empresa.html.erb e _campos_cliente.html.erb)
para incluir os campos do form necessários para cada classe... minha dúvida agora é como eu poderia
enviar um parâmetro para a view (que seria diferente para cada um dos links), de modo que eu possa
determinar 'de onde' veio o chamado (para que assim eu possa saber qual partial chamar)?

Em sábado, 22 de setembro de 2012 19h18min18s UTC-3, Felipe Teixeira escreveu:

Everaldo Gomes

unread,
Sep 23, 2012, 10:20:47 PM9/23/12
to rail...@googlegroups.com
Um before_filter não resolve?

2012/9/23 Felipe Teixeira <felip...@gmail.com>
Reply all
Reply to author
Forward
0 new messages