Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 可以使用嵌套资源限制对索引的访问_Ruby On Rails_Ruby On Rails 3_Cancan - Fatal编程技术网

Ruby on rails 可以使用嵌套资源限制对索引的访问

Ruby on rails 可以使用嵌套资源限制对索引的访问,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我目前正在我的web应用程序中使用cancan,到目前为止,它工作得非常好,但关于rails中的嵌套资源,我遇到了一个问题。访问索引页面时,cancan不会限制用户查看其他登录用户可以看到的内容。它可以很好地用于显示页面,但当访问索引页面时,它不起作用 routes.rb resources :skater do resources :videos end can :manage, Video, :skater => { :user_id => user.id } load_

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

routes.rb

resources :skater do
  resources :videos
end
can :manage, Video, :skater => { :user_id => user.id }
load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :current_user
能力.rb

resources :skater do
  resources :videos
end
can :manage, Video, :skater => { :user_id => user.id }
load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :current_user
视频控制器.rb

resources :skater do
  resources :videos
end
can :manage, Video, :skater => { :user_id => user.id }
load_and_authorize_resource :skater
load_and_authorize_resource :video, :through => :current_user

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

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


尝试删除
:至=>:当前用户
,看看这是否解决了您的问题。查看CanCan Wiki中的,了解嵌套资源应该如何使用

CanCan将通过应用程序中的
current\u 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

看起来您不在嵌套资源中。您是否可以包括您正在使用的其他
load\u和\u authorize\u资源
调用。@BaylorRae'我已更新了上述内容,但没有详细说明effect@BaylorRae'我添加了
无法[:读取,:显示],视频
,但当我尝试查看自己的视频时,它不起作用,我收到了与受限用户相同的错误。这不是完全相同的问题。你的问题是因为你没有授权资源@coltrain的问题似乎是因为他使用的是
:through=>:current_user
。我删除了current_user并添加了just:through=>:skater,但仍然没有任何内容。你认为问题在于我的ability.rb文件吗?@coletrain我更新了我的答案。看看这能不能让你更接近,算了吧!我添加了如果用户和一切开始工作。我已经更新了你的答案,谢谢你的帮助。