Arquitectura para diferentes tipos de usuarios y las formas de creación de la cuenta
-
25-09-2019 - |
Pregunta
Estoy usando los carriles 3 y trazo.
I puede tener 2 tipos de usuarios que estoy llamando 'admin' y 'cliente', tanto almacenada en la tabla Usuarios, diferenciados por el valor de la columna booleana 'admin'.
Un 'admin' puede ser creado 2 formas:
1) Tras la creación de una nueva cuenta - en este caso, también creamos un registro asociado 'negocio'
2) Desde una cuenta existente (por lo que uno 'negocio' 'puede tener múltiples administradores') - en el caso de que queramos asociarlo con un registro de negocio existente
Un 'cliente' puede crearse 1 manera:
1) De una forma separada de los utilizados para crear un 'admin' arriba
En los 3 casos se utilizará una forma diferente. Y tras la presentación que todos tienen diferentes requisitos:
- Quiero enviar diferentes mensajes de correo electrónico a cada uno.
- En el primer caso 'admin' por encima de lo que necesito para comprobar si la URL de la empresa solicitada es único, en el segundo caso no es así. Y en el caso de clientes que no.
- En el caso de la primera 'admin' Quiero crear algunas entradas de base de datos por defecto tras la finalización de una cuenta, pero no en el segundo caso.
- Cuando se crea una cuenta de 'cliente' Quiero realizar alguna otra acción específica para ese tipo de cuenta.
¿Debo usar el mismo controlador para los diferentes tipos de usuario, o por separado ellos? Si ellos deben ser los mismos, ¿cómo sabe qué tipo de usuario debe crear?
¿Qué pasa con los modelos?
¿Alguna idea sobre cómo diseñar esto?
Muchas gracias.
Solución
Mi conjetura inicial sería la creación de dos subclases de User
llamada Admin
y Client
. Un poco como esto:
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
A continuación, puede añadir diferentes formas en 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
Asegúrese de leer sobre infecciones de transmisión sexual en los carriles y leer la documentación de inventar.
Otros consejos
Se puede usar un controlador para ello con diferentes acciones y dirigir sus formas a esas acciones:
form_tag(:controller => "people", :action => "search", :method => "get")