Cancan嵌套限制访问索引的资源

时间:2012-08-30 21:08:44

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

我目前正在我的网络应用程序中使用cancan,到目前为止它工作得很好但是我遇到了有关rails中嵌套资源的问题。访问索引页面时,cancan不会限制用户查看其他登录用户可以看到的内容。它适用于节目页面,但在访问索引页面时它不起作用。

的routes.rb

resources :skater do
  resources :videos
end

ability.rb

can :manage, Video, :skater => { :user_id => user.id }

video_controller.rb

load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :current_user

如何限制对其他用户索引视图的访问权限,以便用户A无法查看用户B视频?

2 个答案:

答案 0 :(得分:2)

尝试删除:through => :current_user,看看是否能解决问题。查看CanCan Wiki中的second code example,了解如何使用嵌套资源。

CanCan将通过您应用中的current_user方法获取当前用户。因此,您不必在authorizing controller actions时定义它。


更新:尝试在控制器中使用此功能。

load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :skater

更新2:我无法判断CanCan是否由于Ability Precedence而失败,或者因为当前用户只是未经授权而无法使用。

根据我到目前为止看到的内容,这是ability.rb文件的外观。第二行将覆盖第一行,允许您限制可以查看和更改的数量。我决定使用:manage,因为它通过包含所有权限来“覆盖所有基础”。

cannot :manage, Video # this will include :read, :show, :edit, :update, and :delete
can :manage, Video, :skater => { :user_id => user.id }

我担心的是你没有正确过滤滑冰者。如果您有任何问题,我建议您尝试这样做。

can :manage, Video, :user_id => user.id

答案 1 :(得分:0)

您应该检查此问题,这与您的问题相同。

Cancan nested_routes restrict acces to :index