【问题标题】:Roles that are User<>Project Based基于用户<>项目的角色
【发布时间】:2010-09-14 18:32:53
【问题描述】:

目前我正在使用 Devise & CanCan,它允许我创建 具有使用 (Roles_Users) 表的角色的用户。

这很好,但我想要的是在我的应用中拥有项目并用于 用户的每个项目都可能具有类似(管理员、查看者、 等)IE,角色不是分配给用户,而是根据用户所属的项目分配给用户。

例子:

  • 用户 X 属于具有管理员角色的项目 A
  • 用户 X 属于具有来宾角色的项目 B
  • 用户 Y 属于具有观察者角色的项目 B

什么样的模型适用于此?

型号

用户 has_many:项目 项目 ? 角色 ?

Users_Roles_Projects (user_id, project_id, role_id)

你怎么看?我是新手,可以使用理解和 从你们这些经验丰富的人那里思考。谢谢!

【问题讨论】:

  • 您是想了解模型和关联应该是什么样子,还是想看看如何在 CanCan 或两者中进行设置?

标签: ruby-on-rails activerecord ruby-on-rails-3 devise cancan


【解决方案1】:

你应该看看 has_many :through。这个 Railscast 应该让你开始运行:http://railscasts.com/episodes/47-two-many-to-many

例如,您可以通过 Memberships 拥有 User has_many Projects(我相信您可以想出一个更好的名字!)

您的用户模型将包含标准用户详细信息,项目模型将包含项目详细信息,并且大概您在某处有一些角色模型(我没有使用您提到的任何一个库,所以我无法评论它们是如何工作的)。关键是会员模型。

成员资格模型将包含用户 ID、项目 ID 和角色 ID。在数据库中,任何给定的 userID 和 projectID 配对都应该只有一个实例,因此通过将 roleID 存储在此配对旁边,您可以将角色分配给指定项目上的该用户。

【讨论】:

  • 太棒了。你熟悉CanCan吗?我很好奇如何将 CanCan 与上面的 Memberships 模型一起使用。想法?
  • 我以前没有使用过CanCan,但是快速浏览一下Railscast 看起来你并没有不能使用它。据我所知,初始化方法只需要一个用户。如果没有对项目的引用,我看不到您如何应用项目特定权限。当然我可能是错的——我对 CanCan 的体验大约是 15 分钟! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2014-06-24
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多