Architecture pour différents types d'utilisateurs et les formulaires de création de compte
-
25-09-2019 - |
Question
J'utilise Rails 3 et concevoir.
Je peux avoir 2 types d'utilisateurs, je vous appelle « admin » et « client », à la fois stockées dans la table des utilisateurs, différenciés par la valeur de la colonne « admin » booléen.
Un 'admin' peut être créé 2 façons:
1) Lors de la création d'un nouveau compte - dans ce cas, nous créons aussi un dossier « d'affaires » associé
2) A partir de l'intérieur d'un compte existant (si une « entreprise » peut avoir plusieurs « admins ») - dans le cas que nous voulons associer à un dossier d'affaires existant
Un 'client' peut être créé 1 façon:
1) A partir d'une forme distincte de ceux qui sont utilisés pour créer un « administrateur » ci-dessus
Dans les 3 cas, une forme différente sera utilisée. Et lors de la soumission tous ont des exigences différentes:
- Je veux envoyer des e-mails différents à chacun.
- Dans le premier cas « admin » ci-dessus, je dois vérifier si l'URL de l'entreprise est unique dans le second cas, je ne le fais pas. Et dans le cas du client, je ne sais pas.
- Dans le premier cas « admin » Je veux créer des entrées de la base de données par défaut à la fin d'un compte, mais pas dans le second cas.
- Quand un « client » compte est créé, je veux effectuer d'autres actions spécifiques à ce type de compte.
Dois-je utiliser le même contrôleur pour les différents types d'utilisateurs, ou les séparer? Si elles doivent être les mêmes, comment savoir quel type d'utilisateur, il doit créer?
Qu'en est-il des modèles?
Toute réflexion sur la façon d'architecte cela?
Merci beaucoup.
La solution
Mon estimation initiale serait de créer deux sous-classes de User
appelé Admin
et Client
. Un peu comme ceci:
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
Ensuite, vous pouvez ajouter différentes formes 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
Assurez-vous de lire sur STI dans Rails et lisez la documentation de Devise.
Autres conseils
Vous pouvez utiliser un contrôleur pour cela avec différentes actions et d'orienter vos formes à ces actions:
form_tag(:controller => "people", :action => "search", :method => "get")
de forment des aides .