我目前在我的 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/

10-13 05:03