我有以下情况:
我的应用有多种类型的用户:Owner
,Team Member
,Collaborator
,Client
和Guest
。 (访客类型与此问题无关)
这些是不同模型之间的联系:
-
Owner
belongs_to Account
-
Account
has_many Team Members
-
Account
has_many Projects
-
Projects
habtm (或hmt) Collaborators
-
Project
habtm (或mht) Clients
我的验证功能需要四个关键功能。授权:
- 能够将协作者升级为团队成员(这意味着将所有habtm删除到Projects,并将belongs_to添加到帐户
- 能够为不同的用户制定不同的设计策略(业主可注册,客户不具备)
- 拥有不同的登录页面,只接受一部分用户(为所有者/团队成员/合作者和客户单独登录)
- 能够使用Account.owner,Account.team_members,Project.collaborators和Project.clients调用不同的用户子集
我已经解决了几个问题,但我不确定哪种解决方案在我的情况下效果最好。
- 起初我考虑过使用Devise进行授权和身份验证,但我认为我最好使用像CanCan这样的授权部分。
- 我还考虑过为每种用户类型使用一个表,但这会使初始创建后更改角色变得更加困难
- 我现在正在配合使用STI,因为TeamMember<用户,客户<用户等等。但由于客户和合作者属于项目和业主,团队成员属于一个账户,我不确定这将与STI轻松合作,而且我也没有真正找到关于STI设计的好例子。 / LI>
任何想法如何解决这种情况?