【发布时间】:2014-08-12 10:30:31
【问题描述】:
我正在使用 rails 4 和 Devise 身份验证。
用户注册只需要电子邮件,然后,在电子邮件验证后,要求填写用户名、名字、姓氏和密码。
用户拥有(拥有)团队,他可以在其中添加合作伙伴。
合作伙伴是用户类,因为他们共享相同的属性。
这是一个非常简单的逻辑,但由于 Devise 单独做了很多操作,我想知道这是否是正确的做法,我的意思是为用户和合作伙伴共享用户模型,而不是拥有一个专用模型每个人。
举个例子,我有这些敏感的想法:
我如何“自动激活”我的合作伙伴,即覆盖设计激活过程?
--> 合作伙伴将在应用内立即可见
--> 显然不允许合作伙伴登录
后期逻辑:
稍后,如果用户尝试注册并且他的电子邮件已经存在于数据库中,它将:
--> 检查用户状态
---->如果是合作伙伴,则创建一个状态为“用户”的新帐户
---->如果是用户,将通过电子邮件发送密码提醒
关于逻辑的更多信息
团队所有者的用户(= 注册用户)的状态为“用户” 生成的用户,称为合作伙伴,将具有“合作伙伴”状态,但来自用户类
因此,一个用户将能够创建多个合作伙伴,并且这些合作伙伴可能拥有相同的电子邮件(假设他们不在同一个团队中)。 我可以用 find 或 create 解决这个重复问题,因为所有合作伙伴都是由同一个用户创建的。
现在,假设许多用户都有共同的合作伙伴。 User1创建partner@gmail.com,User2创建partner@gmail.com 在这里,Devise 将提出否决权并创建区块。
我为什么要为每个人保留合作伙伴,以及我为什么要保留 使用相同电子邮件的合作伙伴和用户?
--> 合作伙伴有个人资料。我希望用户能够为合作伙伴创建他想要的个人资料(头像等)。
--> 合作伙伴可以在不同的团队中以不同的职业(比如四分卫或类似的职业)行事,因此每个用户都可以为独特的 partner@email.com 创建自己的个人资料
--> 如果用户注册(成为所有者,一种官方资料),并且作为合作伙伴出现在几个团队中,那么团队的所有者将被要求从一个他创造了“官方”
我同意,这有点复杂。
目前,我将“所有者”状态存储在用户模型的专用行中。 我有一张卡和合作伙伴之间多对多关系的连接表。 这样,如果用户要求,我可以轻松地用他的新“官方配置文件”ID 更新 partner_id,然后删除用户模型中“非官方”配置文件的行
我的问题实际上是设计具有角色的身份验证以阻止合作伙伴登录尝试(这部分在下面回答)和电子邮件唯一性。
我希望我的解释是清楚的,我为我糟糕的英语道歉。
非常感谢您。
亲切的问候
【问题讨论】:
-
根据您的更新,我觉得需要几个模型来保持独立并避免不必要的逻辑。
标签: ruby-on-rails ruby-on-rails-4 devise polymorphism