Eu tenho várias contas cada um dos seus próprios usuários e quero que o endereço de email dos usuários seja único por conta

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

Pergunta

Estou usando o Rails para criar um aplicativo da Web que fornece a cada empresa sua própria conta e subdomínio, semelhante a como o Basecamp (e outros 37 aplicativos de sinais) LighthouseApp.com, e assim por diante.

Agora eu sei que existem muitos tutoriais decentes sobre como fazer subdomínios em trilhos e até o plug-in de subdomínio.

O problema é que eu quero usar o endereço de email dos usuários como login, o que significa que ele precisa ser único, no entanto, eu só quero que seja exclusivo para cada conta e não em todas as contas.

Estou usando o Devise para autenticação e criei um modelo de "contas" que representa a conta e um modelo de usuário para representar os usuários dessa conta. O Devise opera no modelo de usuário e parece que isso exigiria que cada usuário tivesse um endereço de email exclusivo.

Eu afirmei o problema com clareza suficiente? Posso fornecer esclarecimentos de bom grado.

Alguém pode me apontar na direção certa?


Esclarecendo alguns detalhes para Tim

  • P: Quantas contas um negócio individual pode ter?
  • R: Cada negócio individual teria uma conta. Como "Springfield Maths Grinds"

  • P: Existe uma correlação individual entre subdomínios e contas?

  • R: Sim, como Springfield-Maths-Grinds.myapp.com

  • P: Um "usuário" corresponde a uma pessoa física ou a uma função em uma conta?

  • A: Eu deveria ter explicado isso melhor. Na verdade, tenho dois modelos separados, por exemplo, tutor e aluno. Cada conta teria vários tutores e alunos.

empresas, contas, subdomíniosEmpresas e contas são efetivamente a mesma coisa. Uma 'conta comercial', por assim dizer. Estou usando subdomínios para acessar cada 'conta comercial'

Logins, usuários, endereços de e -mailDevo esclarecer que tenho dois tipos de usuário representados por modelos separados, estes são tutor e aluno. Isso precisará fazer login no aplicativo e eu quero usar um endereço de e -mail como login, em vez de um nome de usuário.

Espero que isso esclareça as coisas em vez de piorar.

Meu problema real é o seguinte, se alguém configurar uma conta comercial para "Springfield Physics Grinds" e um dos alunos de "Springfield Maths Grinds" tentou se inscrever, então eles não poderiam fazê-lo porque o endereço de e-mail já está em uso e precisa ser único. Quero saber como escovar os alunos e tutores em uma conta comercial.

Foi útil?

Solução

Há duas coisas em que você precisa pensar. Integridade e autenticação de dados.

Os Rails permitem que você alcance a singularidade para uma ou mais colunas. Com o escopo, você pode ter vários endereços de email foo@bar.local no banco de dados com a restrição de apenas uma conta. Incluí o que o SQL correspondente pode parecer isso para demonstrar como isso funciona.

# Without scoping
validates :email, :uniqueness => true
SELECT 1 FROM `users` WHERE `users`.email = 'foo@bar.local'

# With scoping
validates :email, :uniqueness => true, :scope => :account_id
SELECT 1 FROM `users` WHERE `users`.account_id = 1 AND `users`.email = 'foo@bar.local'

Estou assumindo que você está usando o Rails 3. Você pode passar a mesma opção para validates_uniqueness_of Se você estiver usando o Rails 2.

Para autenticação, você deseja encontrar a conta, verifique se o usuário pertence a essa conta e verifique se a senha corresponde. Quando você apresenta o formulário de login ao usuário, você já saberá quais contas a autenticação deles é contra. Sua ação pode ser assim.

def create
  @account = Account.find_by_subdomain(params[:subdomain])
  @user    = @account.users.find_by_email(params[:user][:email])
  if @user.authenticate(params[:user][:password])
    redirect_to dashboard_path
  else
    render :new
  end
end

Outras dicas

Eu acho que você precisa ser um pouco mais claro sobre o que está fazendo e exatamente o que está perguntando. O que é importante começar é explicar seus requisitos e seu modelo de dados, em vez de quais pacotes você está usando. Na sua pergunta, temos:

  • negócios
  • Contas
  • subdomínios
  • logins
  • usuários
  • endereço de e-mail

Acho que algumas delas são as mesmas coisas. Então, talvez você possa começar descrevendo como essas coisas se encaixam. Aqui estão algumas perguntas:

  • Quantas contas um negócio individual pode ter?
  • Existe uma correlação individual entre subdomínios e contas?
  • Um "usuário" corresponde a uma pessoa física ou a uma função em uma conta?

Quando estiver claro em sua mente como essas coisas se encaixam, e você pode deixar isso claro, sua pergunta será substancialmente mais fácil de responder.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top