将索引视图限制为用户的记录

时间:2015-08-30 19:31:51

标签: ruby-on-rails ruby controller authorization

我正在研究一个Ruby项目并遇到障碍。这是一件简单的事情,但我一直遇到错误,所以我转向SO寻求帮助。

我需要将视图限制为特定用户创建的记录。在这种情况下,供应商的订单。这是我当前的索引控制器(使用will_paginate gem限制为每页30个):

class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]
  before_filter :authenticate_supplier!

  def index
    @orders = Order.all.order("created_at DESC").paginate(:page => params[:page], :per_page => 30)
  end

现在,所有订单都显示而不是所需的 - 只有特定供应商提供的订单才会显示在索引中。我试图沿着这些方向使用某些东西,但没有运气:

def index
 @orders = Order.current_supplier.order("created_at DESC").paginate(:page => params[:page], :per_page => 30)
end

为供应商使用设计。

1 个答案:

答案 0 :(得分:0)

Devise用于身份验证,您需要的是授权,我建议您查看专门用于此目的的gem,例如cancancan,您在能力文件中定义规则,然后它将在控制器查询中添加条件,这样您就不需要在每次获取这些记录时定义相同的规则。

如果您不想在代码中添加这种复杂性,那么您只需使用供应商对象来获取订单而不是自己的订单类。例如:

# all orders without conditions
Order.all

# orders restricted only to this supplier
current_supplier.orders