2

我有以下情况:

我的应用有几种类型的用户: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 设计的好例子。

任何想法如何解决这种情况?

4

0 回答 0