我的应用程序是在rails 3中构建的,我正在使用CanCan来处理权限。
我希望允许我的用户分享他们的项目并与其他特定用户协作(有点像谷歌文档的做法)。
我只是想知道这样的事情的最佳做法是什么。我现在有一个Project模型和一个User模型。
我应该创建一个has_many:through关系并像协作者一样调用连接表吗?那么一个项目属于一个用户并且拥有多个用户:通过协作者?
我认为它不应该太复杂,但我之前没有这样的关系,所以任何建议都会有所帮助。
提前致谢! :)
答案 0 :(得分:1)
我认为你走在正确的轨道上,Project
与User
有多对多的关系。
除非您希望以后的权限系统更精细,否则这对我来说似乎是一个合理的解决方案:
创建连接表:
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
进行适当授权(将此练习留给您!)