मैं admin_users सेट करता हूं जो ग्राहक वर्ग से संबंधित है (ग्राहक एक कंपनी है)। तो ग्राहक के पास कई admin_users हैं।रेल 3 ActiveAdmin CanCan। सेटअप कैसे करें कि उपयोगकर्ता को केवल उस रिकॉर्ड को देखना चाहिए जो उसके हैं?
मैं किसी निश्चित ग्राहक से संबंधित शिपमेंट रिकॉर्ड तक पहुंच प्रतिबंधित करने की कोशिश कर रहा हूं। मैं नहीं चाहता कि ग्राहक अन्य ग्राहक डेटा देख रहे हों। तो मैं इस सेट अप, लेकिन यह :: क्षमता कुछ भी नहीं ...
वर्ग की क्षमता कैनकैन शामिल करने के लिए लगता है
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...]
तो इंडेक्स पेज में, सभी शिपमेंट प्रदर्शित होते हैं और यदि मैं ग्राहक ए के रूप में लॉग इन हूं और ग्राहक बी के शिपमेंट पर क्लिक करता हूं तो मैं इसे देख सकता हूं, लेकिन यह मुझे अवरुद्ध करना है।
अधिक जानकारी ...
shipments_controller.rb
class ShipmentsController < InheritedResources::Base
before_filter :authenticate_admin_user!
end
इस डॉक्स के अनुसार और काम नहीं करता है किसी भी उपयोगकर्ता किसी भी लदान 'देख सकते हैं क्योंकि या तो की कोशिश की कर सकते हैं: शिपमेंट, शिपमेंट,: customer_id => user.customer_id' https://github.com/ryanb/cancan/wiki/defining-abilities – leonel
आपकी अनुमति परिभाषा ठीक है, यह आपका 'मेनू है: if => ...' ऐसी चीज जो काम नहीं कर रही है, हो सकता है कि आप हमें 'shipments.rb' फ़ाइल में इसका उपयोग करने के तरीके पर अधिक संदर्भ दे सकें (क्या आप वाकई' शिपमेंट_कंट्रोलर.आरबी' 'में नहीं हैं?)। – mbillard
मैंने प्रश्न में और जानकारी जोड़ा। 'मेन्यू: आईडी =>' लाइन क्या है, अगर उपयोगकर्ता को इसका उपयोग करना चाहिए तो मेनू को छुपाएं या दिखाएं, मुझे नहीं लगता कि यह समस्या है। तो मुझे सूचीबद्ध सभी रिकॉर्ड्स मिलते हैं, अगर मैं उन रिकॉर्ड्स में से किसी एक पर क्लिक करता हूं जिसे उपयोगकर्ता नहीं देखना चाहता है, तो यह अभी भी प्रदर्शित हो जाता है और मुझे उम्मीद है कि कैनकन मुझे बताएगी कि एक्सेस अस्वीकृत है। – leonel