2012-12-11 14 views
5

के साथ प्राधिकरण को एकीकृत करना मुझे एकीकरण BjyAuthorize और ज़ेंड नेविगेशन के साथ समस्या है और उन्हें हल करने का तरीका नहीं है। मैं इसे manual आज़माता हूं और सब कुछ ठीक काम करता है। लेकिन मुझे उम्मीद थी कि जब मैं bjyauthorize.config में गार्ड को परिभाषित करता हूं और उसके बाद, मेरे नेविगेशन और गार्ड कॉन्फ़िगरेशन के बीच प्रतिबिंब होगा (अस्वीकार नियंत्रक या मार्ग नेविगेशन आइटम प्रदर्शित नहीं करते हैं)। मेरी समस्या यह है कि नेविगेशन आइटम अभी भी प्रदर्शित हैं, लेकिन अनुभाग सही ढंग से संरक्षित हैं। क्या कोई तरीका है, नेविगेशन में गार्ड को कैसे प्रतिबिंबित किया जाए? Module.phpZF2 एकीकृत करना Zend Navigation

मेरे आवेदन/Module.php दृश्य सहायक विन्यास में मेरा विचार सहायक config: bjyauthorize.global.php

'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
     array('controller' => 'Article\Controller\Article', 'roles' => array('user')), 
), 

और मेरे नेविगेशन में

'mainMenu' => function($sm){ 
       $nav = $sm->get('navigation')->menu(); 
       $serviceLocator = $sm->getServiceLocator(); 
       $acl = $serviceLocator->get('BjyAuthorize\Service\Authorize')->getAcl(); 
       $role = $serviceLocator->get('BjyAuthorize\Service\Authorize')->getIdentity(); 
       $nav->setAcl($acl); 
       $nav->setRole($role); // Todo replace 
       $nav->setUseAcl(); 
       return $nav->setUlClass('nav')->setTranslatorTextDomain(__NAMESPACE__); 
      } 

मेरे गार्ड विन्यास। global.php

return array(
    'navigation' => array(
     'default' => array(
      'articles' => array(
       'label' => 'Articles', 
       'route' => 'articles', 
      ), 
     ), 
    )); 

मैं मार्गों को बदलने की कोशिश करता हूं मॉड्यूल/नियंत्रक/कार्रवाई के लिए अवधि और अभी भी काम नहीं करता है।

उत्तर

5

आपने अपने नेविगेशन कॉन्फ़िगरेशन के भीतर संसाधन निर्दिष्ट नहीं किया है। यह भी सुनिश्चित करें $ भूमिका bjyauthorize-पहचान से मेल खाता बनाने के

'navigation' => array(
    'default' => array(
    array(
     'label' => 'Registration', 
    'resource' => 'controller/cebEvent.registrationController:add', 
    'route' => 'registration/add', 
    ), 
), 
), 

निर्दिष्ट संसाधन अपने गार्ड विन्यास मेल खानी चाहिए:

'guards' => array(
    'BjyAuthorize\Guard\Controller' => array(
     array('controller' => 'cebEvent.registrationController','action' => 'add', 'roles' => array('guest','registration_manage')), 
    ), 
), 
+0

सलाह के लिए धन्यवाद, आप सही हैं। समस्या यह थी कि मैं संसाधन निर्दिष्ट नहीं करता था। – user1893983

0

आप नियंत्रक के बजाय गार्ड \ मार्ग का उपयोग कर के लिए एक के उपयोग का उदाहरण पोस्ट कर सकते हैं? इस मामले के लिए मेरे उदाहरण मार्ग:

'guards' => array(
    'BjyAuthorize\Guard\Route' => array(
     array('route' => 'zfcadmin/sap-targetvalue/index', 'roles' => array('guest', 'user')), 
     array('route' => 'zfcadmin/sap-targetvalue/create', 'roles' => array('user')), 
    ) 
); 
6

किसी को भी इस का उपयोग कर BjyAuthorize \ गार्ड \ मार्ग प्रयास कर रहा है कि बाहर करने में मदद करने के लिए ...

आप route/ के साथ अपने मार्ग नाम उपसर्ग और उपयोग करने वाले के लिए करने की आवश्यकता होगी संसाधन मूल्य

अपने config इस तरह एक गार्ड है ...

'guards' => array(
    'BjyAuthorize\Guard\Route' => array(
     array('route' => 'zfcadmin/zfcuseradmin/list', 'roles' => array('admin')), 
    ) 
); 

आप अपने नेविगेशन

'navigation' => array(
    'default' => array(
     'admin' => array(
      'label' => 'Admin', 
      'route' => 'zfcadmin', 
      'pages' => array(
       'users' => array(
        'resource' => 'route/zfcadmin/zfcuseradmin/list', // route resource ;) 
        'label' => 'Users', 
        'route' => 'zfcadmin/zfcuseradmin/list', 
       ), 
      ), 
     ), 
    ), 
), 

आप इस रखकर डिफ़ॉल्ट एसीएल और भूमिका निर्धारित कर सकते हैं के लिए कुछ इस तरह परिभाषित करेंगे आपके मॉड्यूल की आपकी ऑनबूटस्ट्रैप विधि।

$sm = $e->getApplication()->getServiceManager(); 
$auth = $sm->get('BjyAuthorize\Service\Authorize'); 

$acl = $auth->getAcl(); 
$role = $auth->getIdentity(); 
\Zend\View\Helper\Navigation::setDefaultAcl($acl); 
\Zend\View\Helper\Navigation::setDefaultRole($role); 

मुझे आशा है कि इससे किसी को वहां मदद मिलेगी।

+0

हाय, यह बहुत अच्छी तरह से काम करता है। लेकिन आप कैसे जांचते हैं कि कोई उपयोगकर्ता प्रमाणित है या नहीं? विधि है Identity() मौजूद नहीं है ... – cwhisperer

+0

@cwhisperer BjyAuthorize [प्रमाणीकरण प्रमाणीकरण नहीं] [http://stackoverflow.com/questions/6556522/ प्रमाणीकरण-versus- प्राधिकरण) के लिए है। [ZfcUser मॉड्यूल] (https://github.com/ZF-Commons/ZfcUser) 'ज़ेंड \ प्रमाणीकरण \ प्रमाणीकरण सेवा' का उपयोग करता है जिसमें 'हैइडेन्टिटी()' विधि है जिसे आप ढूंढ रहे हैं। – moranjk

+0

आप सही हैं, thx ... इस संदर्भ में एक और सवाल: एक दृश्य में मैं $- का उपयोग कर सकता हूं-> दिया गया है ('मार्ग/xyz'), मैं सहायक हेल्पर का उपयोग कैसे कर सकता हूं? – cwhisperer

0

जैसा कि griesi ने आपको बताया है कि आपको अपने नेविगेशन कॉन्फ़िगरेशन में संसाधन निर्दिष्ट करने की आवश्यकता है।

अपने उदाहरण में वह संसाधन

नियंत्रक/cebEvent के रूप में इस नियंत्रक & कार्रवाई कहा।registrationController: जोड़ने

मैं बस को जोड़ने के लिए है कि इस संस्करण भी (कार्रवाई के बिना इस मामले में) काम करता है

'संसाधन' => 'नियंत्रक/खेल \ नियंत्रक \ सूची'

चाहते

शायद यह किसी के लिए सहायक है। मैंने सोचा कि यह कभी काम नहीं करेगा क्योंकि यह बहुत गलत लगता है;)

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