2016-10-07 13 views
8

मैंने सोनाटाएडमिनबंडल, सोनाटाउसरबंडल और एफओएसयूसर बंडल के साथ-साथ कोओपिलिल्सएक्लसोनाटाएडमिन एक्स्टेंशनबंडल को सोनाटाएडमिनबंडल में एसीएल का उपयोग करते समय स्थापित किया है।सोनाटाएडमिनबंडल एसीएल कॉन्फ़िगरेशन में फर्मफिल्ड्स

लिस्टिंग मालिकों द्वारा फ़िल्टर की जाती है और सभी ठीक है। ग्राहक ए सिर्फ अपने सामान देख सकता है, ग्राहक बी भी उसके ही। लेकिन अगर मैं एक नई वस्तु बनाने जा रहा हूं तो मैं अन्य ग्राहकों की वस्तुओं को भी देख सकता हूं।

आइए कहें कि कोई ग्राहक समूह बना सकता है जिसका उपयोग उत्पादों को असाइन करने के लिए किया जाएगा। यह एक ड्रॉपडाउन सूची के रूप में उत्पाद बनाने के दौरान किया जाता है (उत्पादों के दृश्य के रूप में कई से एक संबंध)। लेकिन मैं उन समूहों को भी देख सकता हूं जो किसी अन्य ग्राहक द्वारा बनाए गए हैं।

मैं इसे कैसे फ़िल्टर कर सकता हूं? मुझे लगता है कि मुझे ProductsAdmin.php में कोई फ़िल्टरिंग करना है। या क्या यह ProductsRepository.php में होना है? मुझे अब तक दस्तावेज़ों में कोई संकेत नहीं मिल रहा है और किसी भी प्रकार के संकेत या लिंक की सराहना करता हूं जहां मैं इसके लिए सूचनाएं पा सकता हूं।

+0

इस चेक बाहर https://sonata-project.org/bundles/ व्यवस्थापक कक्षा में

{% for object in objects %} {% if owned by this user flag display %} {{object}} {% endif %} {% endfor%} 

कस्टम चुनने क्वेरी की तरह जाना चाहिए व्यवस्थापक/मास्टर/डॉक्टर/संदर्भ/सुरक्षा.html – Filchev

+0

@ फ़िलचेव मैं इसे कई बार पहले पढ़ रहा हूं, विशेष रूप से CoopTilleulsAclSonataAdminExtensionBundle के साथ भाग, जो सूची मोड में काम करता है लेकिन संपादन मोड – Michael

+0

में अभी भी एक अच्छा जवाब नहीं ढूंढ रहा है। – Michael

उत्तर

0

आपको या तो संपादित करें टॉग टेम्पलेट को ओवरराइट करने या कस्टम चयन बॉक्स बनाने की आवश्यकता है। ओवरराइडिंग के बारे में this question देखें। मैं अपने इकाई संरचना नहीं जानता लेकिन इस प्रक्रिया की तरह

$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager'); 
    $user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser(); 
    $query = $em->createQueryBuilder('p') 
     ->select('p') 
     ->from('MyBundle:Product', 'p') 
     ->where('p.user = :user') 
     ->setParameter('user', $user); 

    $formMapper 
      ... 
      ->add('categoria', 'sonata_type_model', array(
    'required' => true, 
    'query' => $query 
)) 
+0

मैं आपका दृष्टिकोण देखता हूं। लेकिन मैं एडमिन क्लास में एम तक पहुंच नहीं प्राप्त कर सकता, क्योंकि यह सार एडमिन से फैला है, जहां कोई $ यह-> get() संभव नहीं है। शायद मैं पेड़ के लिए जंगल नहीं देख सकता। – Michael

+0

@ माइकल आप कॉन्फ़िगरेशन पूल का उपयोग कर व्यवस्थापक वर्ग में एम प्राप्त कर सकते हैं। मैंने अपना जवाब अपडेट किया। – Filchev

+0

मुझे getConfigurationPool के बारे में पता नहीं था। इसके लिए धन्यवाद। लेकिन फिर भी सवाल यह है कि तत्वों को कैसे प्राप्त करें, जहां वर्तमान उपयोगकर्ता का स्वामी है? आपके उदाहरण में आप उत्पाद में कॉलम उपयोगकर्ता का संदर्भ लेते हैं। लेकिन मैं एसीएल का उपयोग CoopTilleulsAclSonataAdminExtensionBundle के साथ कर रहा हूं। तो मैं उपयोगकर्ता जैसे कॉलम पर संदर्भ नहीं दे सकता। – Michael

संबंधित मुद्दे