Rails 3 ActiveAdmin CanCan. Как настроить, чтобы Пользователь мог видеть только те записи, которые принадлежат ему?

Я настраиваю admin_users, принадлежащий классу клиентов (Клиент - это компания). Итак, у клиента много admin_users.

Я пытаюсь ограничить доступ к записям об отправке, принадлежащим определенному клиенту. Я не хочу, чтобы клиенты смотрели данные других клиентов. Итак, я установил это, но, похоже, ничего не делает ...

class Ability include CanCan :: Ability

  def initialize(user)
    user ||= AdminUser.new       
    if user.role == "administrator"
        can :manage, :all
    else
      cannot :create, :all
      cannot :update, :all
      cannot :destroy, :all
      can :read, Shipment do |shipment|
        shipment.customer == user.customer
      end
    end
  end 
end

И у меня это есть в shipments.rb ...

ActiveAdmin.register Shipment do
  menu :if => proc{ can?(:read, Shipment) }, :priority => 1
  controller.authorize_resource

  index do
    column "File #", :sortable => :file_number do |shipment|
      link_to shipment.file_number, admin_shipment_path(shipment)
    end
    [... more columns ...]
    default_actions if can? :manage, Shipment
  end

  show :title => :file_number do
  panel "Shipment Details" do
  attributes_table_for shipment do
    row("File number") {shipment.file_number}
    row("Mode") {shipment.mode}
    row("Ocean Rate") { number_to_currency shipment.ocean_rate}
    row("Customer") { link_to shipment.customer.company_name, admin_customer_path(shipment.customer)}
    row("Shipper") { link_to shipment.shipper.company_name, admin_shipper_path(shipment.shipper)}
    row("Broker") { link_to shipment.broker.company_name, admin_broker_path(shipment.broker)}
  end
end

[...more show action stuff...]

Итак, на странице индекса отображаются все поставки, и если я вошел в систему как клиент A и щелкнул по отправке клиента B I может видеть это, но он должен блокировать меня.

Подробнее ...

shipments_controller.rb
class ShipmentsController < InheritedResources::Base
  before_filter :authenticate_admin_user!
end
6
задан leonel 20 January 2012 в 16:28
поделиться