2012-09-06 4 views
5

हमारे पास एक ऐसी प्रणाली है जहां प्रशासकों और मानक उपयोगकर्ताओं को अपने स्वयं के अलग-अलग सुरक्षा प्रदाताओं द्वारा संभाला जाता है। इससे व्यवस्थापकीय पृष्ठों में समस्या आई है क्योंकि प्रशासक मुख्य साइट के फ़ायरवॉल के पीछे मौजूद किसी भी फाइल या छवियों तक नहीं पहुंच सकते हैं जब तक कि वे मुख्य साइट पर भी साइन इन नहीं होते हैं।सिम्फनी 2: दो अलग-अलग प्रदाताओं के साथ फ़ायरवॉल किए गए मार्ग तक पहुंच

प्रदाता के बावजूद छवियों और फ़ाइलों को सभी प्रमाणीकृत उपयोगकर्ताओं और प्रशासकों के लिए सुलभ होने की आवश्यकता है। उन्हें एक नियंत्रक के माध्यम से परोसा जाता है जो अधिक बढ़िया पहुंच नियंत्रण प्रदान करता है।

क्या एक से अधिक प्रदाता को एक मार्ग तक पहुंचने के लिए परिभाषित करना संभव है?

यहाँ हमारे वर्तमान security.yml के नीचे छीन संस्करण है:

security: 
    providers: 
     admin_user_db: 
      entity: { class: OurAdminUserBundle:AdminUser, property: username } 
     site_user_db: 
      entity: { class: OurSiteUserBundle:SiteUser, property: username } 
    firewalls: 
     admin_login: 
      pattern: ^/admin/login$ 
      security: false 
     site_user_login: 
      pattern: ^/login 
      security: false 
     file_route: 
      pattern: ^/file 
      anonymous: ~ 
      ### We need to allow this route only for authorized users from 
      ### either admin_user_db or site_user_db providers 
     admin_secured_area: 
      pattern: ^/admin 
      http_basic: ~ 
      provider: admin_user_db 
      form_login: 
       check_path: /admin/login_check 
       login_path: /admin/login 
      logout: 
       path: /admin/logout 
       target:/
     site_secured_area: 
      pattern: .* 
      http_basic: ~ 
      provider: site_user_db 
      form_login: 
       check_path: /check_login 
       login_path: /login 
       failure_path: /login 
       failure_forward: false 
      logout: 
       path: /logout 
       target:/

उत्तर

5

मुझे लगता है कि आप क्या ढूंढ ChainProvider है। यह प्रदाता अनुक्रमिक तरीके से आपके दो मौजूदा प्रदाताओं का उपयोग करने के लिए कॉन्फ़िगर किया जाएगा।

चेन प्रदाता पहले उपयोगकर्ता को पहले प्रदाता के साथ प्रमाणीकृत करने का प्रयास करेगा जिसे इसे कॉन्फ़िगर किया गया था। यदि यह एक सफलता है, तो उपयोगकर्ता प्रमाणीकृत है। यदि यह विफलता है, तो चेन प्रदाता अगले और तब तक प्रयास करेगा जब तक कि कोई और प्रदाता प्रयास नहीं किया जा सके।

मैंने इस तकनीक का उपयोग उपयोगकर्ताओं को फ़ॉर्म लॉगिन या फेसबुक लॉगिन के साथ प्रमाणित करने के लिए किया था। मेरे पास दो प्रदाता थे, एक फेसबुक के लिए, एक फॉर्म के लिए। फिर, मेरे फ़ायरवॉल में, प्रदाता श्रृंखला प्रदाता था और फिर, उपयोगकर्ता अपने क्रेडेंशियल या उनके फेसबुक खाते से लॉगिन करने में सक्षम थे।

चूंकि चेन प्रदाता अनुक्रमिक है, इसलिए मेरा सुझाव है कि प्रदाता को रखना संभवतः पहले इस्तेमाल किया जाएगा।

यहाँ

एक विन्यास नमूना Symfony प्रलेखन साइट से लिया:

security: 
    providers: 
     chain_provider: 
      chain: 
       providers: [in_memory, user_db] 
     in_memory: 
      users: 
       foo: { password: test } 
     user_db: 
      entity: { class: Acme\UserBundle\Entity\User, property: username 

आप documenation यहाँ पर एक नज़र ले जा सकते हैं:

  1. Using Multiple User Providers

सादर, मैट

+0

उत्तर के लिए धन्यवाद, हम इन निर्देशों के साथ 'चेनप्रोवाइडर' सेट अप करने में सक्षम थे (हालांकि मुझे लगता है कि वाक्यविन्यास थोड़ा अलग था सिम्फनी का हमारा संस्करण)। आखिरकार हमने 'एडमिन यूज़र' को खत्म कर दिया और @ जेपरोविक की तरह भूमिकाओं का उपयोग करके सुझाव दिया, क्योंकि हमने महसूस किया कि अलग-अलग प्रदाताओं हमारे परिदृश्य में वास्तव में आवश्यक नहीं हैं। – Kaivosukeltaja

1

मुझे इस मुद्दे के साथ कुछ अनुभव था और समाधान वह था जो मैट लिखा था।

हालांकि, चूंकि आवेदन के पास प्रशासन, छात्र और शिक्षक फायरवॉल थे, इसलिए आवश्यकता होने पर मैं सफल प्रतिरूपण प्राप्त नहीं कर सका। यही है, प्रशासन के उपयोगकर्ता उपयोगकर्ताओं को उनके फ़ायरवॉल और केवल उन लोगों का प्रतिरूपण कर सकते हैं।

अब, यह संभव है कि मैंने कुछ गलत किया लेकिन क्योंकि यह समय संवेदनशील कार्य था, हमने सब कुछ एक फ़ायरवॉल के पीछे रखने का फैसला किया और विभिन्न भूमिका नौकरी करें। यह बहुत आसान समाधान साबित हुआ लेकिन आखिरकार यह आपके ऊपर है ...