Configuré usuarios_administradores que pertenecen a una clase de cliente (el cliente es una empresa). Entonces, el Cliente tiene muchos usuarios de administración.Rails 3 ActiveAdmin CanCan. ¿Cómo configurar ese Usuario solo debería ver los registros que le pertenecen?
Estoy tratando de restringir el acceso a los registros de envío que pertenecen a un determinado cliente. No quiero que los clientes miren los datos de otros clientes. Así que lo configuran, pero parece que no hacer nada ...
Capacidad clase incluyen CanCan :: Capacidad
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
Y tengo esto en 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...]
Por lo tanto, en la página de índice, se muestran todos los envíos y si estoy conectado como Cliente A y hago clic en el envío del Cliente B puedo verlo, pero se supone que debe bloquearme.
Más información ...
shipments_controller.rb
class ShipmentsController < InheritedResources::Base
before_filter :authenticate_admin_user!
end
probado este de acuerdo con los documentos y no funciona bien debido a que cualquier usuario puede ver cualquier envío ' can: show, Shipment,: customer_id => user.customer_id' https://github.com/ryanb/cancan/wiki/defining-abilities – leonel
Su definición de permiso está bien, es su 'menú: if => ...' Lo que no funciona, tal vez nos podría dar más contexto sobre cómo se usa en el archivo 'shipment.rb' (¿está seguro de que no está en' shipment_controller.rb'?). – mbillard
Agregué más información en la pregunta. Lo que hace la línea 'menu: id =>' es simplemente esconder o mostrar el menú si el usuario debería tener acceso a él, no creo que ese sea el problema. Así que obtengo todos los registros enumerados, si hago clic en uno de los registros que el usuario NO debe ver, aún se muestra y espero que CanCan me diga Acceso denegado. – leonel