将设计用户限制为他们自己的视图/关联

时间:2013-05-05 07:11:20

标签: ruby-on-rails ruby-on-rails-3 devise

我正在使用设计进行身份验证,并在用户(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看到什么等等(不是特定于这两个用户,而是针对所有用户)。我该怎么做 ?我应该有用户控制器吗?我现在没有。如果我有控制器,我该怎么办?我在考虑重定向它?

感谢

1 个答案:

答案 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之类的路径。