【问题标题】:I have multiple accounts each its own users, and want the users email address to only be unique per account我有多个帐户,每个帐户都有自己的用户,并且希望每个帐户的用户电子邮件地址都是唯一的
【发布时间】:2010-10-23 11:56:27
【问题描述】:

我正在使用 Rails 构建一个 Web 应用程序,它为每个企业提供自己的帐户和子域,类似于 basecamp(和其他 37 个信号应用程序)lighthouseapp.com 等。

现在我知道有很多关于如何在 Rails 中创建子域的不错的教程,甚至还有 subdomain-fu 插件。

问题是我想使用用户的电子邮件地址作为他们的登录名,这意味着它必须是唯一的,但是我只希望它对每个帐户而不是所有帐户都是唯一的。

我正在使用设计进行身份验证,并且我创建了一个代表帐户的“帐户”模型,以及一个代表该帐户用户的用户模型。 Devise 在用户模型上运行,看起来它要求每个用户都有一个唯一的电子邮件地址。

我是否已经足够清楚地说明了这个问题?我很乐意提供澄清。

谁能指出我正确的方向?


为蒂姆澄清一些细节

  • 问:一个人可以有多少个账户 企业有吗?
  • 答:每个企业都有一个帐户。比如“斯普林菲尔德数学”

  • 问:子域和帐户之间是否存在一对一的关联?

  • 答:是的,例如 springfield-maths-grinds.myapp.com

  • 问:“用户”是指自然人还是帐户中的角色?

  • A:我应该更好地解释这一点。我实际上有两个独立的模型,例如导师和学生。每个帐户将有多个导师和学生。

企业、帐户、子域 企业和账户实际上是一回事。可以说是“商业帐户”。 我正在使用子域来访问每个“企业帐户”

登录名、用户、电子邮件地址 我应该澄清一下,我有两种类型的用户,它们由不同的模型表示,它们是导师和学生。这些将需要登录到应用程序,我想使用电子邮件地址作为他们的登录名,而不是用户名。

希望这能解决问题,而不是让事情变得更糟。

我的实际问题如下, 如果有人要为“Springfield 物理研究”设置一个商业帐户,并且“Springfield 数学研究”的一名学生尝试注册,那么他们将无法注册,因为该电子邮件地址已在使用中,需要是独一无二的。我想知道如何在企业帐户中确定学生和导师的范围。

【问题讨论】:

  • 谢谢 - 这是更多的细节,非常有帮助。我现在知道的足以知道我无法回答这个问题(对不起),但现在对于在这方面有技能的人来说应该容易得多。澄清工作做得很好!

标签: ruby-on-rails subdomain devise accounts subdomain-fu


【解决方案1】:

您需要考虑两件事。数据完整性和身份验证。

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。如果您使用的是 Rails 2,则可以将相同的选项传递给 validates_uniqueness_of。

对于身份验证,您需要找到帐户,确保用户属于该帐户并检查他们的密码是否匹配。当您向用户展示登录表单时,您已经知道他们的身份验证针对的是哪个帐户。您的操作可能如下所示。

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

【讨论】:

    【解决方案2】:

    我认为你需要更清楚地了解你在做什么以及你在问什么。重要的是首先解释您的需求和数据模型,而不是您使用的包。在您的问题中,我们有:

    • 企业
    • 帐户
    • 子域
    • 登录
    • 用户
    • 电子邮件地址

    我猜其中一些是相同的东西。所以也许你可以从概述这些东西如何组合在一起开始。以下是一些问题:

    • 单个企业可以拥有多少个帐户?
    • 子域和帐户之间是否存在一对一的关联?
    • “用户”是指自然人还是帐户中的角色?

    一旦您清楚这些事情是如何组合在一起的,并且您可以清楚地说明这一点,您的问题就会更容易回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 2016-10-03
      • 2021-11-03
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多