Configurazione di admin_users che appartiene a una classe cliente (il Cliente è una società). Quindi il cliente ha molti admin_users.Rails 3 ActiveAdmin CanCan. Come configurare che l'utente dovrebbe vedere solo i record che gli appartengono?
Sto tentando di limitare l'accesso ai record di spedizione che appartengono a un determinato cliente. Non voglio che i clienti guardino i dati di altri clienti. Così ho creato questo in su, ma sembra di non fare nulla ...
classe Capacità includono CanCan :: Capacità
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
E io ho questo 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...]
Quindi nella pagina dell'indice, tutte le spedizioni vengono visualizzate e se sono registrato come cliente A e clicco sulla spedizione del cliente B posso vederlo, ma dovrebbe bloccarmi.
Più info ...
shipments_controller.rb
class ShipmentsController < InheritedResources::Base
before_filter :authenticate_admin_user!
end
Abbiamo provato questo in base ai documenti e non funziona o perché qualsiasi utente può vedere qualsiasi spedizione ' can: show, Shipment,: customer_id => user.customer_id' https://github.com/ryanb/cancan/wiki/defining-abilities – leonel
La tua definizione di permesso va bene, è il tuo 'menu: if => ...' cosa che non funziona, forse potresti darci più contesto su come è usato nel file 'shipments.rb' (sei sicuro che non sia in' shipments_controller.rb'?). – mbillard
Ho aggiunto più informazioni nella domanda. Ciò che la riga 'menu: id =>' fa è nascondere o mostrare il menu se l'utente deve accedervi, non penso che sia questo il problema. Quindi ottengo tutti i record elencati, se faccio clic su uno dei record che l'utente NON deve vedere, viene comunque visualizzato e mi aspetto che CanCan possa dirmi Access Negato. – leonel