与CanCan,Devise和Rolify的关联授权

时间:2012-08-09 19:59:32

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

我的应用程序中有当前的数据库结构:

Publisher has_many videos, has_many users
Video      belongs_to publisher
User       belongs_to publisher

我希望能够根据发布者向用户授予权限,但实际获得编辑的对象是视频对象。

意味着用户X可以编辑发布者1和2中的视频,但用户Y只能编辑发布者2和3中的视频,依此类推。我很确定这可以通过CanCan,Devise,Rolify组合完成。

有人能指出我在正确的方向吗?

1 个答案:

答案 0 :(得分:1)

抱歉延迟回复。希望你现在已经解决了你的问题,但我会为你提供一个解决方案。

在你的CanCan能力中你有这样的东西:

def initialize(current_user) 
  current_user ||= User.new

  can :update, Video do |video|
    current_user.publisher_list.contains? video.publisher
  end
end

如果user.publisher_list返回用户可以修改的发布者列表,则上述代码将起作用。我相信你也可以这样做:

def initialize(current_user)
  current_user ||= User.new

  can :update, Video, publisher: {id: current_user.publisher_list}
end