Architecture pour différents types d'utilisateurs et les formulaires de création de compte

StackOverflow https://stackoverflow.com/questions/4401048

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.

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top