2012-11-27 7 views
5

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

मान लीजिए कि आप निम्नलिखित संस्थाओं करते हैं:

  1. उपयोगकर्ता, अलग-अलग भूमिकाओं के साथ, यानी
    • परियोजना का नेतृत्व
    • कार्यकर्ता
    • व्यवस्थापक
  2. परियोजनाओं
  3. सौंपे गए उपयोगकर्ता
  4. परियोजना में कार्य

अब निम्नलिखित नियम व्यक्त किया जाना चाहिए: भूमिका के साथ एक उपयोगकर्ताकार्यकर्ता केवल है कार्य देखने की अनुमति , जो कि एक परियोजना से संबंधित हैं जो उन्हें सौंपा गया है।

यह परिणाम है कि एक उपयोगकर्ता केवल पूरी सूची में कुछ कार्य देखने की अनुमति है।

हम RBAC का उपयोग भूमिकाओं वास्तव में कार्य पढ़ने की अनुमति देने के लिए होगा। लेकिन स्थिति लागू नहीं है क्योंकि इसमें विशिष्ट संस्थाएं शामिल हैं। एसीएल इस्तेमाल किया जा सकता है, लेकिन हम डर एसीएल रखने का बुरा सपना आवश्यकताओं (साथ consitent प्रविष्टियां उपयोगकर्ता बदल सकते हैं, भूमिकाओं बदल सकते हैं, नई कार्य पेश किया जा सकता है एक जो सही प्रविष्टियां प्राप्त करने के लिए, के लिए होता है बस जटिल के रूप में)।

जब एक विशेष परियोजना (WHERE project_id = 123) को देखने बेशक वहाँ विशिष्ट प्रश्न हो सकता है, लेकिन यह है, जहां मूल रूप से हर काम के प्रदर्शन के लिए माना जा सकता है एक "मेरे सभी मौजूदा कार्य के दृश्य" के लिए मदद नहीं करता है, लेकिन प्रत्येक एकल प्रवेश के लिए एसीएल की जांच करनी होगी।

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

उत्तर

1

ठीक है, मैं Yii framework का उपयोग अपनी अच्छी आरबीएसी परत के साथ करता हूं। मैं एसीएल से बहुत परिचित नहीं हूं, और न ही मुझे हाल ही में होने की जरूरत है।

वाईआई आरबीएसी शर्तों में, समाधान की आपकी कुंजी 'व्यवसाय नियम' का उपयोग कर रही है। बिज़रूल्स कोड की छोटी स्निपेट हैं जो 'अनुमति' या 'भूमिका' (वाईआई के नियमों में 'ऑथ आइटम' से जुड़ी हैं) से जुड़ी हैं। यह कोड गतिशील रूप से चलाया जाता है जब किसी निश्चित 'अनुमति' तक पहुंच निर्धारित करने की आवश्यकता होती है (कहें, लेकिन इसे 'भूमिका' से भी जोड़ा जा सकता है), और यह 'प्रश्न में आइटम' (आपके उदाहरण में कार्य) प्राप्त करता है और विशिष्ट कार्य के लिए वास्तविक पहुंच निर्धारित करें या नहीं।

  • कार्य संपादित
  • संपादित करें खुद कार्यों (जो भूमिका 'कार्यों व्यवस्थापक' के साथ किसी को भी अनुमति दी जानी चाहिए) (:

    • आप निम्न अनुमतियों की आवश्यकता है कहते हैं: यहां पर विस्तृत उदाहरण है जिसे सबमिट करने वाले व्यक्ति को अनुमति दी जानी चाहिए, यह कार्य)।
  • अब, 'कार्य संपादित करें' कोड अनुभाग में, आपको पहले 'संपादन कार्य' की अनुमति की जांच होगी। अगर ठीक है - अनुमति दें।
  • यदि अनुमति नहीं थी, तो 'स्वयं का कार्य संपादित करें' (अन्यथा-निर्माण का उपयोग करके) की जांच करें। अब आखिरी उल्लिखित अनुमति पर एक बिज़रुले (= php code) संलग्न किया जाना चाहिए जो 'कार्य' ऑब्जेक्ट स्वीकार करता है और 'निर्माता आईडी' को 'वर्तमान में चेक किए गए उपयोगकर्ता आईडी' से तुलना करता है। यदि बराबर है, तो यह सच हो जाता है, जिसका अर्थ है कि पहुंच दी जानी चाहिए।

यह संक्षेप में है। यदि आप अधिक रुचि रखते हैं, तो आधिकारिक मार्गदर्शिका के this section देखें। अन्य संसाधनों का भी एक समूह है, आपको चाहिए।

+0

अपने जवाब के लिए धन्यवाद "रिकॉर्ड कहां स्थान = 'सीए' से चयन *"। मेरी समझ से उन व्यवसाय नियमों को मैं "एप्लिकेशन कोड में फ़िल्टरिंग" कहूंगा, जो मेरी समस्या का समाधान नहीं करता है। मैं कार्यों को पुनर्प्राप्त करने के लिए एक प्रश्न पूछूंगा (25) और फिर कुछ परिणाम व्यापार नियम द्वारा फ़िल्टर किए गए हैं। तब मुझे डीबी को एक और कॉल करने की आवश्यकता होगी और जब तक मैं 25 परिणाम वापस नहीं कर सकता तब तक फ़िल्टर करें। यह मेरी राय में बहुत अच्छा नहीं है।मेरे दिमाग में मैं एसक्यूएल क्वेरी में व्यवसाय नियमों को लागू करना चाहता हूं और तुरंत 25 परिणाम पुनर्प्राप्त करना चाहता हूं। – pdobrigkeit

+0

यह प्रश्न PHP के साथ टैग किया गया है। क्या आप तय कर सकते हैं कि क्या फ्रेमवर्क/लाइब्रेरी आप शीर्ष पर बना रहे हैं, यदि कोई है, तो फैसला किया है? यह चर्चा को और अधिक उपयोगी बना सकता है ...। –

+0

हम ZF2 का उपयोग करेंगे। मॉड्यूल के रूप में जेडएफ 2/एसीएल और जेएफसीआरबीएसी। लेकिन मुझे लगता है कि PHP गलत टैग हो सकता है? – pdobrigkeit

2

आपको एसीएल और आरबीएसी से परे देखने की आवश्यकता है और विशेषता-आधारित अभिगम नियंत्रण (एबीएसी - एनआईएसटी की मार्गदर्शिका here देखें) पर विचार करें। गार्टनर इस जगह को "बाहरी प्राधिकरण प्रबंधन" कहते हैं।

एबीएसी के साथ, आप आसानी से किसी भी नियम को व्यक्त कर सकते हैं जो ध्यान में रखता है न कि उपयोगकर्ता कौन है बल्कि उपयोगकर्ता क्या करना चाहता है, कहां, कब, क्यों, और कैसे। प्राधिकरण को परिभाषित करने के लिए विशेषताओं का उपयोग करके, आप नीतियों को लागू करने के लिए XACML का उपयोग कर सकते हैं। XACML एक ओएएसआईएस मानक है (बस एसएएमएल की तरह)।

एक्सएसीएमएल के साथ, आपको एक एपीआई मिलता है जहां आप प्रश्न पूछ सकते हैं जैसे: एलिस इस रिकॉर्ड को देख सकता है? लेकिन आपके मामले में, यह पर्याप्त नहीं है क्योंकि आप डेटाबेस से रिकॉर्ड फ़िल्टर करना चाहते हैं। और, जैसा कि आप वर्णन करते हैं, आप चाहते हैं कि जब तक आपके पास अधिकृत रिकॉर्ड्स की सही संख्या न हो, तब तक डेटाबेस को डेटाबेस पर आगे और आगे जाने की बजाय शुरुआत से सही होना चाहिए। यह वह जगह है जहां XACML विशेष रूप से दिलचस्प हो जाता है क्योंकि यह तकनीक-तटस्थ है। आप जावा, सी #, और अन्य भाषाओं में एक्सएसीएमएल लागू कर सकते हैं उदा। पायथन लेकिन विभिन्न परतों (प्रस्तुति, एपीआई, और ... डेटाबेस) में XACML भी लागू करते हैं।

  • कौन सा रिकॉर्ड कर सकते हैं ऐलिस दृश्य: XACML एक रिवर्स क्वेरी तरह से एक एसक्यूएल बयान है जिसमें आप फिर प्रासंगिक रिकॉर्ड के लिए अपने बैकएंड डेटाबेस क्वेरी करने के लिए इस्तेमाल कर सकते हैं का निर्माण करने के पूछे जा सकता है?
  • ऐलिस कैलिफोर्निया जो पैदावार में रिकॉर्ड देख सकते हैं

HTH

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