3

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

路线.rb

resources :skater do
  resources :videos
end

能力.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 视频?

4

2 回答 2

2

尝试删除:through => :current_user以查看是否解决了您的问题。查看 CanCan Wiki 中的第二个代码示例,了解应该如何使用嵌套资源。

CanCan 将通过您应用程序中的方法获取当前用户current_user。因此,您不必在授权控制器操作时定义它。


更新:尝试在您的控制器中使用它。

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

更新 2:我不知道 CanCan 是因为能力优先还是因为当前用户未经授权而失败。

根据我到目前为止所看到的,这就是您的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
于 2012-08-31T02:30:40.703 回答
0

你应该检查这个问题,它和你一样的问题。

Cancan nested_routes 限制对 :index 的访问

于 2012-08-31T00:22:41.893 回答