我正在使用rails 4并设计身份验证。
用户注册只需要电子邮件,然后,在电子邮件验证后,需要填写用户名、名字、姓氏和密码.
用户有(拥有)团队,他可以在其中添加合作伙伴。
合作伙伴是用户类,因为它们共享相同的属性。
这是一个非常简单的逻辑,但是由于设计只执行许多操作,我想知道这是否是正确的轨道,我的意思是为用户和合作伙伴共享用户模型,而不是为每个用户和合作伙伴创建一个专用模型。
举个例子,我脑子里有一些敏感的东西:
我如何“自动激活”我的合作伙伴,意思是超越设计激活过程?
->合作伙伴将立即在应用程序中可见
后来的逻辑:
稍后,如果用户尝试注册,并且他的电子邮件已经存在于数据库中,它将:。
->检查用户状态
->如果是用户,密码提示将通过电子邮件发送。
有关逻辑的更多信息
拥有团队的用户(=注册用户)的状态为" User“用户,称为Partners,将具有"partners”状态,但来自User类
这样说,一个用户将能够创建多个合作伙伴,而这些合作伙伴可能拥有相同的电子邮件(比如他们不在同一个团队中)。我可以用find或create解决这个复制问题,因为所有的合作伙伴都是由同一个用户创建的。
现在,假设许多用户都有共同的合作伙伴。User1 create partner@gmail.com和User2 create partner@gmail.com在这里,Devise将否决并阻止创建。
为什么我想为每个人保留合作伙伴,为什么我想让合作伙伴和用户拥有相同的电子邮件?
->合伙人有个人资料。我希望用户能够为合作伙伴创建他想要的个人资料(阿凡达等)。
->如果用户注册(成为所有者,某种程度上是官方配置文件),并且作为几个团队的合作伙伴,那么团队的所有者很好地被要求从他创建的配置文件到“正式配置文件”。
我同意,有点复杂。
现在,我将“所有者”状态存储在用户模型中的专用行中。我有一个连接的桌子,为许多许多之间的关系卡和合作伙伴。这样,如果用户请求,我可以轻松地用他的新“官方配置文件”id更新partner_id,然后在用户模型中删除“非官方”配置文件的行。
我的问题实际上是设计带有角色的身份验证,以阻止合作伙伴登录尝试(以下部分回答)和电子邮件唯一性。
我希望我的解释是清楚的,我为我糟糕的英语道歉。
先谢谢你。
亲切的问候
发布于 2014-08-12 13:29:47
正如你在这里提到的,这个方法很好。您可以在同一个用户表中有合作伙伴和用户。据我所知,user has_many teams and team belongs_to user .User将是团队的所有者或合作伙伴。
因此,当用户添加合作伙伴时,只需创建一个方法来处理用户创建。多一个包含user_id、team_id和user_role的表(“用户”或“合作伙伴”)
假设数据库使用的是sql,
class Team < ActiveRecord::Base
has_many :teams_users
has_many :users, :through => :team_users
end
class TeamUsers < ActiveRecord::Base
belongs_to :team
belongs_to :user
end
class User < ActiveRecord::Base
has_many :teams_users
has_many :teams, :through => :teams_users
end设计期望密码,以便您可以从服务器端设置密码和password_confirmation。不要向用户发送邮件,因为您希望避免默认的身份验证设计方法。设计在用户属性中存储confirmed_at,该属性在用户单击确认链接时使用时间戳设置。当用户被添加时,可以直接从后端Update this confirmed_at,也可以根据您的要求。一旦合作伙伴的电子邮件id注册,密码设置和confirmed_at可用,合作伙伴帐户是活动的。
让我们看看第二部分,当用户试图以合作伙伴或用户的身份注册/登录时。若要处理此问题,请更改用户的sign_in行为。当用户尝试使用users_team时,从sign_up表继承并检查用户角色。有一个更清楚的想法,如果用户在两个不同的团队中有两个角色将是混乱的。
另外,即使用户状态是合作伙伴,也不应该创建新帐户,因为devise认为电子邮件id在默认情况下是唯一的,并且由于用户对象已经创建了,除非您试图改变这一点。在这两种情况下发送密码提醒看起来都很好,但是您仍然可以根据应用程序的需要来处理功能。
https://stackoverflow.com/questions/25262072
复制相似问题