为协作者设置权限

时间:2011-01-14 16:44:24

标签: ruby-on-rails relational-database

我的应用程序是在rails 3中构建的,我正在使用CanCan来处理权限。

我希望允许我的用户分享他们的项目并与其他特定用户协作(有点像谷歌文档的做法)。

我只是想知道这样的事情的最佳做法是什么。我现在有一个Project模型和一个User模型。

我应该创建一个has_many:through关系并像协作者一样调用连接表吗?那么一个项目属于一个用户并且拥有多个用户:通过协作者?

我认为它不应该太复杂,但我之前没有这样的关系,所以任何建议都会有所帮助。

提前致谢! :)

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上,ProjectUser有多对多的关系。

除非您希望以后的权限系统更精细,否则这对我来说似乎是一个合理的解决方案:

创建连接表:

rails generate migration create_project_collaborators

class CreateProjectCollaborators < ActiveRecord::Migration
  def self.up
    create_table :project_collaborators do |t|
      t.references :project
      t.references :user
    end
  end

def self.down drop_table :project_collaborators end end

将关系添加到模型中:

class Project < ActiveRecord::Base
  has_and_belongs_to_many :collaborators, :class_name => 'User', :join_table => 'project_collaborators'
end
class User < ActiveRecord::Base
  has_and_belongs_to_many :project_collaborations, :join_table => 'project_collaborators'
end

Ability课程中,您可以使用User#project_collaborations进行适当授权(将此练习留给您!)