2014-05-21 9 views
5

मैं सिस्टम बना रहा हूं और मतदाताओं और एसीएल के बीच फैसला करने की कोशिश कर रहा हूं। मुझे यह हासिल करने की आवश्यकता है कि ऑब्जेक्ट गुणों तक पहुंचने के लिए अलग-अलग भूमिकाएं हों, उदाहरण के लिए: एक नियमित प्रमाणीकृत उपयोगकर्ता पोस्ट और इसकी सामग्री देख सकता है लेकिन यह "स्थिति" विशेषता नहीं है, और संपादक भूमिका के साथ उपयोगकर्ता भी पोस्ट देख सकता है और यह सामग्री है, और "स्थिति" विशेषता देखने और इसे संपादित करने की अनुमति है। क्या मैं अकेले मतदाताओं का उपयोग करके इस कार्यक्षमता को प्राप्त कर सकता हूं, या मुझे एसीएल का उपयोग करने की आवश्यकता है?symfony2 मतदाता या एसीएल

संपादित करें:

मैं माफी चाहता भ्रामक प्रश्न के लिए, मैं सिम्फोनी के लिए नया हूँ और अभी तक उन अवधारणाओं समझ में नहीं आता हूँ। जो मैं हासिल नहीं करना चाहता वह ऑब्जेक्ट फ़ील्ड स्तर में अनुमति है। enter image description here

नियमित उपयोगकर्ता "शीर्षक" और "सामग्री" गुण का उपयोग कर सकते हैं, और "सामग्री" संपत्ति "संशोधित करने, मॉडरेटर देखने और संपादित, पिछले संपत्तियों की दोनों कर सकते हैं, और व्यवस्थापक सभी वस्तु गुण के लिए उपयोग किया जाना चाहिए, और कर उनके साथ जो भी हो।

उत्तर

11

दस्तावेज़ केवल गुणों के बजाय वस्तुओं पर पहुंच की जांच कैसे करें। मैं निर्णय लेने की व्याख्या करूंगा जब मतदाताओं या एसीएल के बीच चयन करते हैं। इसके बाद मैं समझाऊंगा कि आप अपना लक्ष्य प्राप्त करने के लिए (हाइराची) मतदाताओं का उपयोग कैसे कर सकते हैं।


  1. उपयोगकर्ताओं बस नहीं है या एक वस्तु एक भूमिका के आधार पर करने के लिए पहुँच नहीं है जब, पहुँच फ़ायरवॉल का उपयोग किया जा सकता है और सबसे सरल उपाय है।

  2. हालांकि जब कुछ नियमों के तहत प्रति ऑब्जेक्ट आधार पर पहुंच निर्भर करती है तो एक मतदाता का उपयोग किया जाना चाहिए। एक उदाहरण, उपयोगकर्ता इसे बनाते समय केवल एक पोस्ट संपादित कर सकते हैं। लेकिन मॉडरेटर हमेशा एक पोस्ट को संपादित करने के लिए पालन करना चाहिए।

  3. एक्सेस नियंत्रण का सबसे कठिन तब होता है जब उपयोगकर्ता को किसी अन्य उपयोगकर्ता द्वारा एक्सेस प्रदान किया जा सकता है। उदाहरण के लिए, एक व्यवस्थापक उपयोगकर्ताओं को एक पोस्ट में असाइन कर सकता है और उन्हें अनुमतियों को संपादित कर सकता है। यह एक ऐसा समाधान है जहां उपयोगकर्ता की भूमिका पर पूरी तरह से आधारित निर्णय का निर्धारण नहीं किया जा सकता है। ऑब्जेक्ट के लिए प्रति उपयोगकर्ता को एक्सेस/अनुमतियों को संग्रहीत करने की आवश्यकता है। यह एसीएल करता है। यह प्रति उपयोगकर्ता डेटाबेस में वस्तुओं पर अनुमतियों को स्टोर करता है।


आपकी समस्या का सवाल है। अधिकतर इस तरह के उपयोग कोड में ही संभाले जाते हैं। मैंने एक इकाई के लिए कई अलग-अलग रूपों को देखा है। UserPostFormType, ModeratorPostFormType और AdminPostFormType। यह बहुत शुष्क नहीं है जैसा आप देख सकते हैं। और कोड

में उपयोगकर्ता के प्रकार की जांच करना भूमिकाओं को परिभाषित करने और पदानुक्रम का उपयोग करके उन्हें प्रबंधित करने पर विचार करें।

प्रति कार्य प्रति संपत्ति अलग-अलग भूमिकाओं को परिभाषित करें। इस प्रकार निम्नलिखित भूमिकाओं को परिभाषित करें।

ROLE_ID_VIEW 
ROLE_ID_EDIT 
ROLE_TITLE_VIEW 
ROLE_TITLE_EDIT 
... 

आप इन भूमिकाओं को सही उपयोगकर्ता भूमिका में असाइन कर सकते हैं।

security: 
    role_hierarchy: 
     ROLE_USER:  [ROLE_TITLE_VIEW, ROLE_CONTENT_VIEW, ROLE_CONTENT_EDIT] 
     ROLE_MODERATOR: [ROLE_USER, ROLE_TITLE_EDIT] 
     ROLE_ADMIN:  [ROLE_MODERATOR, ROLE_ID_EDIT, ROLE_ID_VIEW] 

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

+0

धन्यवाद, मैंने इस मुद्दे को एक समान तरीके से हल किया (उपयोगकर्ता भूमिकाएं बनाकर, लेकिन व्यक्तिगत क्षेत्र के बिना) कुछ समय पहले । आपका उत्तर अधिक समझ में आता है। –

-1

मतदाताओं के पास एसीएल के साथ कुछ लेना देना नहीं है। मतदाता चिंता मार्ग पहुंच है जबकि एसीएल चिंता वस्तु को पढ़ने/लिखने का उपयोग है। इसलिए यह एक या दूसरे नहीं है क्योंकि उनके पास एक दूसरे के साथ कुछ भी नहीं है।

+4

[सिम्फनी डॉक्स] से (http://symfony.com/doc/current/cookbook/security/acl.html) "एसीएल का उपयोग करना मामूली नहीं है, और सरल उपयोग के मामलों (...) मतदाताओं का उपयोग करने पर विचार करें । " – albertedevigo

+0

मैं गीलेर पर जांच करने के लिए मतदाताओं का उपयोग करता हूं, जब कोई उपयोगकर्ता किसी ऑब्जेक्ट आईडी में होता है तो कोई ऑब्जेक्ट एक्सेस कर सकता है। इसके अलावा आप एक ऑब्जेक्ट को एक मतदाता को पास कर सकते हैं, इसलिए मुझे समझ में नहीं आ रहा है कि आप ऐसा क्यों नहीं कर सके ... –