Ruby on rails 将设计用户限制为其自己的视图/关联
我正在使用Desive进行身份验证,并且在用户(Ruby on rails 将设计用户限制为其自己的视图/关联,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,我正在使用Desive进行身份验证,并且在用户(有许多:产品)和产品模型(属于:用户)之间存在关联 我的路由文件是 resources :users do resources :products end 现在发生的是,id为3的用户在/users/3/products上也可以看到/users/4/products上的内容。我想限制这一点。我不希望/users/3/products能够看到/users/4/products上的内容等等(不是针对这两个用户,而是针对所有用户)。我该怎么做?我
有许多:产品
)和产品模型(属于:用户
)之间存在关联
我的路由文件是
resources :users do
resources :products
end
现在发生的是,id为3的用户在/users/3/products
上也可以看到/users/4/products
上的内容。我想限制这一点。我不希望/users/3/products
能够看到/users/4/products
上的内容等等(不是针对这两个用户,而是针对所有用户)。我该怎么做?我应该有一个用户控制器吗?我现在没有。如果我有控制器,我怎么做?我在想也许可以重定向它
谢谢您可以在产品控制器中的过滤器之前添加一个
:
class ProductsController < ApplicationController
before_filter :user_is_current_user
...
private
def user_is_current_user
unless current_user.id == params[:user_id]
flash[:notice] = "You may only view your own products."
redirect_to root_path
end
end
end
如果您使用了上面的方法,那么在URL中就不需要用户ID,您可以使用类似于/users/products
或只是/products
的路径,实际上我需要ID,稍后我会将其转换为用户名(使用slug(友好ID gem))现在发生的是,我甚至无法进入/user/:ID/products视图。它将所有内容重定向到根路径对不起,这可能应该是参数[:user\u id]
而不仅仅是[:id]
。我已经更新了我的答案。你也可以更改过滤器,允许管理员用户查看所有内容。是的,我这样做了,加上我弄乱了路由中的一个成员函数,这就是为什么它会这样做。谢谢:)before_filter
是否也与rails 5兼容?
def index
@products = current_user.products # will fetch all products with a user_id matching the current user's
end