Arquitetura para vários tipos de usuários e formulários de criação de contas
-
25-09-2019 - |
Pergunta
Estou usando o Rails 3 e invente.
Posso ter 2 tipos de usuários que estou chamando de 'Admin e' Client ', ambos armazenados na tabela de usuários, diferenciados pelo valor da coluna Boolean' Admin '.
Um 'admin' pode ser criado de 2 maneiras:
1) Após a criação de uma nova conta - neste caso, também criamos um registro de 'negócios' associado
2) De dentro de uma conta existente (para que um 'negócio' possa ter vários 'administradores') - no caso, queremos associá -la a um registro de negócios existente
Um 'cliente' pode ser criado 1 Way:
1) de um formulário separado do que aqueles para criar um 'administrador' acima
Em todos os três casos, uma forma diferente será usada. E, mediante envio, todos eles têm requisitos diferentes:
- Eu quero enviar e -mails diferentes para cada um.
- No primeiro caso de 'admin' acima, preciso verificar se o URL de negócios solicitado é único, no segundo caso que não. E no caso do cliente eu não.
- No primeiro caso 'admin', quero criar algumas entradas de banco de dados padrão após a conclusão de uma conta, mas não no segundo caso.
- Quando uma conta de 'cliente' é criada, quero executar outras ações específicas para esse tipo de conta.
Devo usar o mesmo controlador para os diferentes tipos de usuário ou separá -los? Se eles deveriam ser iguais, como sabe que tipo de usuário ele deve criar?
E os modelos?
Alguma idéia de como arquitetar isso?
Muito obrigado.
Solução
Meu palpite inicial seria criar duas subclasses de User
chamado Admin
e Client
. Um pouco assim:
class User < ActiveRecord::Base
end
class Admin < User
devise :database_authenticatable, :etc
after_create :create_business
validates_uniqueness_of :business_url
# etc
end
class Client < User
devise :database_authenticatable, :etc
# etc
end
Em seguida, você pode adicionar formas diferentes em config/routes.rb
:
YourApp::Application.routes.draw do
# for the cases that someone can create their own user
devise_for :clients
devise_for :admins
# for creating it when logged in as admin
namespace :backend do
resources :admins
end
end
Leia o STI no Rails e leia a documentação do Devise.
Outras dicas
Você pode usar um controlador para isso com ações diferentes e direcionar seus formulários para essas ações:
form_tag(:controller => "people", :action => "search", :method => "get")
a partir de Os trilhos formam ajudantes.