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

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

знаю, что есть много приличных руководств по работе с поддоменами в rails, и даже плагин subdomain-fu.

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

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

Достаточно ли ясно я изложил проблему?Я с радостью предоставлю разъяснения.

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


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

  • В: Сколько аккаунтов можноу отдельного предприятия?
  • A: У каждого отдельного предприятия будет один аккаунт.Например, "Springfield Maths grinds"

  • В: Существует ли взаимно-однозначная корреляция между поддоменами и учетными записями?

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

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

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

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

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

Надеюсь, это проясняет ситуацию, а не делает ее хуже.

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

Ответы [ 2 ]

1 голос
/ 23 октября 2010

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

Rails позволяет вам определять уникальность одного или нескольких столбцов. С помощью области действия вы можете иметь несколько адресов электронной почты 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
0 голосов
/ 23 октября 2010

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

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

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

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

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

...