繁体   English   中英

我有多个帐户,每个帐户都有自己的用户,并且希望每个帐户的用户电子邮件地址都唯一

[英]I have multiple accounts each its own users, and want the users email address to only be unique per account

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

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

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

我正在使用devise进行身份验证,并且创建了一个代表帐户的“帐户”模型和一个代表该帐户的用户的用户模型。 Devise在用户模型上运行,并且似乎要求每个用户都有一个唯一的电子邮件地址。

我已经足够清楚地陈述了这个问题吗? 我很高兴提供澄清。

谁能指出我正确的方向?


为蒂姆澄清一些细节

  • 问:单个企业可以拥有多少个帐户?
  • 答:每个单独的企业都有一个帐户。 例如“ Springfield Maths Grinds”

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

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

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

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

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

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

希望这可以使事情变得清晰,而不是变得更糟。

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

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

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'

我假设您使用的是Rails3。如果您使用的是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

我认为您需要对自己正在做的事情和确切的要求有所了解。 首先重要的是解释您的需求和数据模型,而不是您使用的程序包。 在您的问题中,我们有:

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

我猜其中有些是一样的。 因此,也许您可​​以首先概述这些东西如何组合在一起。 这里有一些问题:

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

一旦您清楚地知道这些东西是如何组合在一起的,并且可以明确说明,您的问题就会很容易回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM