我目前在我的 web 应用程序中使用 cancan,到目前为止它工作得很好,但我在 rails 中遇到嵌套资源的问题。访问索引页面时,cancan 不会限制用户查看其他登录用户可以看到的内容。它适用于显示页面,但在访问索引页面时它不起作用。
routes.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
如何限制对其他用户索引 View 的访问,以便用户 A 无法查看用户 B 的视频?
最佳答案
尝试删除 :through => :current_user
以查看是否解决了您的问题。查看 CanCan Wiki 中的 second code example 以了解应该如何使用嵌套资源。
CanCan 将通过应用程序中的 current_user
方法获取当前用户。因此,您不必在 authorizing controller actions 时定义它。
更新: 尝试在您的 Controller 中使用它。
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
关于ruby-on-rails - Cancan 嵌套资源限制对索引的访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12205559/