Architettura di vari tipi di utenti e forme di creazione conto
-
25-09-2019 - |
Domanda
sto usando Rails 3 e mettere a punto.
posso avere 2 tipi di utenti chiamo 'admin' e 'cliente', sia memorizzato nella tabella Utenti, differenziato per il valore della colonna booleana 'admin'.
Un 'admin' può essere creato 2 modi:
1) Al momento della creazione di un nuovo account - in questo caso abbiamo anche creare un record associato 'business'
2) Da un account esistente (così si 'business' può avere più 'amministratori') - nel caso in cui vogliamo associare con un record di business esistente
A 'cliente' può essere creato 1 modo:
1) Da un modulo separato rispetto a quelli utilizzati per creare un 'admin' sopra
In tutti i 3 casi verrà utilizzata una forma differente. E al momento della presentazione tutti hanno esigenze diverse:
- Voglio inviare diversi messaggi di posta elettronica a ciascuno.
- Nel primo caso 'admin' sopra ho bisogno di controllare se l'URL attività commerciale richiesto è unico, nel secondo caso non lo faccio. E nel caso del cliente non lo faccio.
- Nel caso in cui il primo 'admin' Voglio creare alcune voci del database di default dopo il completamento di un account, ma non nel secondo caso.
- Quando un account 'cliente' è stato creato voglio per eseguire alcune altre azioni specifiche per quel tipo di account.
Devo usare lo stesso controller per i diversi tipi di utente, o separarli? Se essi dovrebbero essere gli stessi, come fa a sapere che tipo di utente deve creare?
E i modelli?
Qualche idea su come architetto questo?
Grazie mille.
Soluzione
La mia ipotesi iniziale sarebbe quello di creare due sottoclassi da User
chiamato Admin
e Client
. Un po 'come questo:
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
In seguito, è possibile aggiungere forme diverse in 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
Assicurarsi di leggere su STI in Rails e leggere la documentazione di Devise.
Altri suggerimenti
È possibile utilizzare un controller per questo con azioni diverse e dirigere i moduli a quelle azioni:
form_tag(:controller => "people", :action => "search", :method => "get")