У меня есть несколько учетных записей каждый его собственные пользователи, и хочется адрес электронной почты пользователя, чтобы быть уникальным для каждого аккаунта
-
25-09-2019 - |
Вопрос
Я использую 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
Другие советы
Я думаю, что вам нужно быть немного яснее о том, что вы делаете, и именно то, что вы спрашиваете. Что важно начать с объяснения ваших требований и вашей модели данных, а не какие пакеты, которые вы используете. В вашем вопросе у нас есть:
- бизнес
- учетные записи
- поддомены
- логины
- пользователи
- адрес электронной почты
Я предполагаю, что некоторые из них одинаковы. Таким образом, возможно, вы можете начать с помощью того, как эти вещи соответствуют. Вот несколько вопросов:
- Сколько аккаунтов может иметь отдельный бизнес?
- Существует ли корреляция в одну к одной между субдоменами и аккаунтами?
- Соответствует ли «пользователю» физическому человеку или роли в пределах аккаунта?
Как только вы ясно в уме, как эти вещи соответствуют вместе, и вы можете сделать это ясно, ваш вопрос будет существенно легче ответить.