我目前正在我的网络应用程序中使用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视频?
答案 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)
您应该检查此问题,这与您的问题相同。