Bir müşteri sınıfına ait olan admin_users'ı kuruyorum (Müşteri bir şirkettir). Müşteri, birçok admin_users'a sahip.Raylar 3 ActiveAdmin CanCan. Kullanıcı, yalnızca kendisine ait kayıtları nasıl ayarlamalı?
Belirli bir müşteriye ait olan Gönderi kayıtlarına erişimi kısıtlamaya çalışıyorum. Müşterilerin diğer müşterilere ait verileri izlemesini istemiyorum. Bu yüzden bunu ayarlamak ama :: Yetenek Cancan dahil hiçbir şey ...
sınıf yeteneği yapmak gibi görünüyor
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
Ve shipments.rb içinde bu var ...
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...]
Dizin sayfasında, tüm gönderiler görüntülenir ve Müşteri A olarak giriş yaptım ve Müşteri B yüklemesine tıklarsam onu görebilirim, ancak engellemesi gerekiyordu.
diğer bilgiler ...
shipments_controller.rb
class ShipmentsController < InheritedResources::Base
before_filter :authenticate_admin_user!
end
bu dokümanlara göre ve herhangi bir kullanıcı herhangi bir sevkıyat 'görebilirsiniz ya çünkü çalışmıyor çalıştı can: show, Shipment,: customer_id => user.customer_id' https://github.com/ryanb/cancan/wiki/defining-abilities – leonel
İzin tanımınız gayet iyi, 'menünüz: if => ...' çalışmayan bir şey, belki bize 'shipments.rb' dosyasında nasıl kullanıldığına dair daha fazla içerik verebilirdiniz ('shipments_controller.rb' içinde olmadığından emin misiniz?). – mbillard
Soruya daha fazla bilgi ekledim. 'Menu: id => 'satırının ne yapması, kullanıcının menüye erişimi olması gerektiğinde gizlemek ya da göstermek, sorun olduğunu düşünmüyorum. Bu yüzden listelenen tüm kayıtları alıyorum, kullanıcının görmemesi gereken kayıtlardan birine tıklarsam, hala görüntüleniyor ve CanCan'ın Erişim Reddedildiğini söylemesini bekliyorum. – leonel