我正在使用设计进行身份验证,并在用户(has_many :products
)和产品模型(belongs_to :user
)之间建立关联。
我的路线档案是
resources :users do
resources :products
end
现在发生的情况是,/users/3/products
处身份为3的用户还可以在/users/4/products
看到最新消息。我想限制它。我不希望/users/3/products
能够在/users/4/products
看到什么等等(不是特定于这两个用户,而是针对所有用户)。我该怎么做 ?我应该有用户控制器吗?我现在没有。如果我有控制器,我该怎么办?我在考虑重定向它?
感谢
答案 0 :(得分:3)
您可以在产品控制器中添加before_filter
:
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
此外,在产品控制器中,您只能检索属于current_user
的产品:
def index
@products = current_user.products # will fetch all products with a user_id matching the current user's
end
如果您使用上述内容,则您不需要在网址中使用用户ID,您可以使用/users/products
或/products
之类的路径。