У меня есть несколько учетных записей каждый его собственные пользователи, и хочется адрес электронной почты пользователя, чтобы быть уникальным для каждого аккаунта

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

Вопрос

Я использую Rails, чтобы построить веб-приложение, которое предоставляет каждому бизнесу своей учетной записью и поддоменом, аналогично тому, как Basecamp (и другие 37 приложений сигналов) LighthouseApp.com и так далее.

Теперь я знаю, что существует много порядочных учебных пособий о том, как делать поддомены в рельсах, а даже плагин поддомена-фу.

Дело в том, что я хочу использовать адрес электронной почты пользователя в качестве входа в систему, что означает, что он должен быть уникальным, однако я хочу, чтобы он был только уникальным для каждой учетной записи, а не на всех учетных записях.

Я использую разработку для аутентификации, и я создал модель «учетных записей», которая представляет учетную запись, и пользовательскую модель для представления пользователей для этой учетной записи. Devise работает на модели пользователя, и казалось бы, что для каждого пользователя будет иметь уникальный адрес электронной почты.

Я понял проблему достаточно четко? Я могу с радостью предоставить уточнение.

Может кто-то указать мне верное направление?


Уточняя некоторые детали для Тим

  • Q: Сколько аккаунтов может иметь отдельный бизнес?
  • A: Каждый отдельный бизнес будет иметь один счет. Такие как «Springfield Maths Millss»

  • В: Есть ли связь между поддомом и аккаунтами в одну сторону?

  • A: Да, например SpringField-maths-grinds.myapp.com

  • Q: Соответствует ли «Пользователь» физическому человеку или роль внутри учетной записи?

  • A: Я должен был объяснить это лучше. У меня на самом деле есть две отдельные модели, например, репетитор и студент. У каждой учетной записи будет несколько репетиторов и студентов.

Предприятия, счета, субдоменыПредприятия и аккаунты эффективно то же самое. «Бизнес-счет» так сказать. Я использую поддомены для доступа к каждому «деловой учетной записи»

Логины, пользователи, адреса электронной почтыЯ должен уточнить, что у меня есть два типа пользователя, которые представлены отдельными моделями, это репетитор и студент. Это нужно будет войти в приложение, и я хочу использовать адрес электронной почты в качестве входа в систему вместо имени пользователя.

Надеюсь, что проясняет вещи, а не что-то хуже.

Моя фактическая проблема заключается в следующем, если кто-то должен был настроить бизнес-счет для «физики Springfield Physics», и один из учащихся «математики Springfield Maths» пытался зарегистрироваться, тогда они не смогут сделать это, потому что адрес электронной почты уже используется и должен быть уникальным. Я хочу знать, как охватывать студентов и репетиторов на бизнес-счет.

Это было полезно?

Решение

Есть две вещи, о которых нужно подумать. Целостность и аутентификация данных.

Rails позволяет вам схватить уникальность в одну или несколько столбцов. С Scoping вы можете иметь несколько адресов электронной почты Foo@bar.local в базе данных с ограничением только одного на счет. Я включил то, что соответствующий SQL может посмотреть, чтобы продемонстрировать, как это работает.

# 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'

Я предполагаю, что вы используете Rails 3. Вы можете пройти ту же вариант для validates_uniqueness_of Если вы используете Rails 2.

Для аутентификации вы захотите найти учетную запись, убедитесь, что пользователь принадлежит этой учетной записи и убедитесь, что их пароль совпадает. Когда вы представите форму входа в систему пользователю, вы уже знаете, какой аккаунт их аутентификация против. Ваши действия могут выглядеть так.

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

Другие советы

Я думаю, что вам нужно быть немного яснее о том, что вы делаете, и именно то, что вы спрашиваете. Что важно начать с объяснения ваших требований и вашей модели данных, а не какие пакеты, которые вы используете. В вашем вопросе у нас есть:

  • бизнес
  • учетные записи
  • поддомены
  • логины
  • пользователи
  • адрес электронной почты

Я предполагаю, что некоторые из них одинаковы. Таким образом, возможно, вы можете начать с помощью того, как эти вещи соответствуют. Вот несколько вопросов:

  • Сколько аккаунтов может иметь отдельный бизнес?
  • Существует ли корреляция в одну к одной между субдоменами и аккаунтами?
  • Соответствует ли «пользователю» физическому человеку или роли в пределах аккаунта?

Как только вы ясно в уме, как эти вещи соответствуют вместе, и вы можете сделать это ясно, ваш вопрос будет существенно легче ответить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top