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