2013-03-11 3 views
9

से इनकार करते हैं मैं सेटअप bjyoungblood/bjy-authorize मॉड्यूल है, लेकिन मैं वर्तमान में एक 403 एक home मार्ग में विन्यस्त के अलावा प्रत्येक यूआरएल के लिए "पहुँच से मना" त्रुटि हो रही है।Zend फ्रेमवर्क 2 - BjyAuthorize हमेशा पहुँच

मेरे module.byjauthorize.global.php दिखता है निम्नलिखित की तरह:

'bjyauthorize' => array(
    'guards' => array(
     'BjyAuthorize\Guard\Controller' => array(
      array('controller' => 'index', 'action' => 'index', 'roles' => array('guest','user')), 
      array('controller' => 'index', 'action' => 'stuff', 'roles' => array('user')), 
      array('controller' => 'zfcuser', 'roles' => array()), 
      //backend 
      array('controller' => 'Application\Controller\Index', 'roles' => array('admin')), 
      array('controller' => 'MyModule\MyEntity\MyEntity', 'roles' => array('admin')), 

     ), 

     'BjyAuthorize\Guard\Route' => array(
      array('route' => 'zfcuser', 'roles' => array('user')), 
      array('route' => 'zfcuser/logout', 'roles' => array('user')), 
      array('route' => 'zfcuser/login', 'roles' => array('guest')), 
      array('route' => 'zfcuser/register', 'roles' => array('guest')),     
      array('route' => 'home', 'roles' => array('admin')), 
      array('route' => 'my-entity', 'roles' => array('admin')), 
     ), 
    ), 
), 

मैं BjyAuthorize\Guard\Route भाग को हटाने की कोशिश की, लेकिन कोई प्रभाव के साथ। जब मैं home रूट हटा देता हूं तो मुखपृष्ठ भी अवरुद्ध हो जाता है। तो दोनों नियंत्रक- और रूट-गार्ड काम करने लगते हैं। मैं इस व्यवहार को कैसे डीबग कर सकता हूं?

+1

में इस करके अपने कोड डिफ़ॉल्ट भूमिका 'guest' सेट है? – Sam

+0

हां। कॉन्फ़िगरेशन और डेटाबेस में (मैन्युअल रूप से) – Ron

+0

हम्म, इस तरह की त्रुटि बहुत गहरी हो सकती है। यह मेरे अंत में एक कामकाजी कॉन्फ़िगरेशन है, लेकिन मैं मार्ग या नियंत्रकों की रक्षा नहीं कर रहा हूं: https://github.com/manuakasam/DuitMarketplace/blob/master/config/module.config.php#L92 नियंत्रक 'अनुक्रमणिका' और 'एप्लिकेशन \ नियंत्रक \ सूचकांक निश्चित रूप से अलग हैं? – Sam

उत्तर

10

नोट: निम्नलिखित मान्य के लिए सभी की BjyAuthorize 1.2.*

पहले, विचार है कि दोनों मार्गों और नियंत्रक की रक्षा अनावश्यक है। मैं व्यक्तिगत रूप से केवल नियंत्रकों की रक्षा करता हूं, क्योंकि एक ही नियंत्रक के लिए कई मार्ग हो सकते हैं।

  • स्थापित Zend Developer Tools है, जो इस तस्वीर में की तरह, आप में से वर्तमान में Acl role सेट एक संक्षिप्त विवरण प्राप्त करने के लिए अनुमति देता है::

    एक बार जब आप या तो मार्ग या नियंत्रक गार्ड config, आप कर सकते हैं हटाया

    enter image description here

  • चेक अगर आप सही पहचान प्रदाता कॉन्फ़िगर किया है: डिफ़ॉल्ट रूप से एक ZfcUser की प्रयोक्ता आईडी का उपयोग करता है औरमें उनकी भूमिका को देखता हैतालिका।

  • जांचें कि guest भूमिका में सार्वजनिक पृष्ठ तक पहुंच है, जैसे zfcuser नियंत्रक (लॉगिन क्रियाओं के लिए) या zfcuser/login मार्ग।

Akrabat के रूप में बताया, BjyAuthorize\Guard\Controller और BjyAuthorize\Guard\Route के लिए विन्यास whitelists कर रहे हैं, जो मूल रूप से मतलब है कि आप डिफ़ॉल्ट guest भूमिका के लिए सेट करना पड़ कि अगर आपके पास अपठित प्रमाणीकृत किया जा रहा है पृष्ठों को ब्राउज़ करना चाहते हैं।

जैसे ही एक गार्ड कॉन्फ़िगर किया गया है, यह किसी भी कॉन्फ़िगर किए गए संसाधन तक पहुंच को अवरुद्ध करता है, इसलिए सुनिश्चित करें कि आपने guest (या जो भी आपने $config['bjyauthorize']['default_role'] में कॉन्फ़िगर किया है, कम से कम लॉगिन नियंत्रक या मार्ग तक पहुंच गया है।

+0

धन्यवाद आप दो! मैंने नियंत्रकों के रास्ते के साथ गलती की ... तो गूंगा! अब तक यह सब काम करने लगता है! – Ron

+1

@Ron भले ही आपकी गलती एक टाइपो है, मैंने सवाल संपादित कर दिया है ताकि यह बहुत स्थानीयकृत न हो (अन्यथा यह बंद हो जाएगा)। मुझे आशा है कि यह भी दूसरों :) – Ocramius

+0

धन्यवाद करने के लिए उपयोगी है, मैं इतना भी उम्मीद है, :) – Ron

4

जैसे ही आप 'BjyAuthorize\Guard\Controller' सरणी में एक प्रविष्टि बनाते हैं, तो आपको उचित रूप से अनुमतियों के साथ प्रत्येक नियंत्रक के लिए प्रविष्टियां बनाने की आवश्यकता होती है। (! में प्रवेश के लिए):

मैं इस राशि

'BjyAuthorize\Guard\Controller' => array(
    // Access for everyone 
    array('controller' => 'zfcuser', 'roles' => array('guest')), 
    array('controller' => 'Application\Controller\Index', 'action' => 'index', 'roles' => array('guest')), 
    array('controller' => 'error', 'roles' => array('guest')), 

    // Restricted 
    array('controller' => 'User\Controller\AdminUser', 'roles' => array('admin')), 

), 

यह महत्वपूर्ण है कि आप अतिथि zfuser की एक्सेस देने के है और त्रुटि (डिबग सामान के लिए कठिन अन्यथा)।

मैंने एक साथ नियंत्रक और मार्ग गार्ड का उपयोग करने की कोशिश नहीं की है।

1

मैं ठीक उसी समस्या हुई।

मुझे लगता है कि समस्या BjyAuthorize अच्छी तरह से बस को कॉपी करने और चिपकाने और प्रदान की फाइलों से बाहर काम कर रहे हैं हम में से बहुत से दस्तावेज नहीं है कि है। निम्नलिखित से उदाहरण के लिए:

'BjyAuthorize\Guard\Controller' => array(
      array('controller' => 'zfcuser', 'roles' => array()), 
     ), 

आप इस तरह के रूप में अपने नियंत्रकों को जोड़ने के लिए उम्मीद करेंगे:

array('controller' => 'controllername', 'role' => array()), 

लेकिन अगर आप पूरा पथ जोड़ने की जरूरत है अन्यथा यह काम नहीं करेगा:

array('controller' => 'Folder/Controller/Action', 'role' => array()), 

मुझे उम्मीद है कि यह किसी को कुछ घंटों तक काम बचाएगा क्योंकि मैं पूरी तरह से परेशान था!

0

डिबग module.php

public function onBootstrap($e) 
    { echo "<pre>"; 
     var_dump($e->getTarget()->getServiceManager()->get('BjyAuthorize\Provider\Identity\ProviderInterface')); 
    } 
संबंधित मुद्दे