2012-05-08 10 views
6

मैं इंट्रानेट साइट के एक्सेस कंट्रोल को कार्यान्वित कर रहा हूं। जो आसान होगा, अगर कंपनी के पास 200+ कर्मचारी नहीं थे और लगभग हर किसी के लिए कस्टम अनुमतियां नहीं थीं। यह पागलपन है, मुझे पता है, लेकिन मैं इसे बदल नहीं सकता।क्या नियम आधारित पहुंच नियंत्रण का एक सरल सामान्य कार्यान्वयन है?

तो, मैंने एक सामान्य कार्यान्वयन खोजने की कोशिश की जो मेरी आवश्यकताओं को पूरा करेगी, लेकिन इसे नहीं मिला, इसलिए मैं इसे स्वयं करने गया। अंत में, मैं एक काफी सामान्य समाधान के साथ आया जिसने मुझे सोचा: किसी ने इसे पहले किया होगा!

मैंने इसे रोक दिया (विषय कार्य ऑब्जेक्ट अनुमति) एक्सेस कंट्रोल।

.-------.  .-----------.  .-------. 
| users |1---*| STOPRules |*---1| tasks | 
`-------'  '-----------'  '-------' 

एक बंद नियम निम्नलिखित गुण

STOPRule { 
    Subject; 
    Task; 
    ObjectType; 
    Permission; 
    Relation; 
} 

वस्तु संबंध हो सकता है: मैं निम्नलिखित रिश्ता नहीं है मालिक, निर्माता, Revisor, आदि इस क्षेत्र की आवश्यकता नहीं है, का समर्थन करने के सामान्य कार्य जब यह वहां होता है, तो वर्तमान उपयोगकर्ता और ऑब्जेक्ट इंस्टेंस के बीच संबंध एक प्रतिनिधि द्वारा गणना की जाती है। इसके बाद मौजूदा संबंध को नियम पर आवश्यक संबंध के साथ तुलना की अनुमति देने या इनकार करने के लिए तुलना की जाती है।

मुझे बताएं कि क्या मैं पर्याप्त स्पष्ट नहीं था।

दो सवाल उठता है:

  1. वहाँ इस तरह एक खुला स्रोत कार्यान्वयन है?

  2. क्या आपको इस समस्या के बाद मुझे कोई समस्या दिखाई दे रही है?

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

जॉन (विषय) कर सकते हैं की (अनुमति) संपादित (कार्य) एक आदेश (वस्तु) अगर वह निर्माता (संबंध) है आदेश।

कृपया, क्या आप लोग एक वास्तविक उपयोग केस प्रदान कर सकते हैं जिसे इस मॉडल का उपयोग करके व्यक्त नहीं किया जा सकता है?

+2

+1 "कार्यालय स्थान" प्रकार के वातावरण के लिए +1 - आप शायद सभी टीपीएस रिपोर्ट भी भरें। – JonH

+0

आपके मॉडल डिज़ाइन के लिए एक तरफ के रूप में, [रोल आधारित एक्सेस कंट्रोल] (http://en.wikipedia.org/wiki/Role-based_access_control) ध्वनि की तरह बिल मॉडल के अनुसार फिट बैठता है? आपका शीर्षक इस के बहुत करीब था, मुझे आश्चर्य हुआ कि क्या आप मूल रूप से यही मतलब है। –

+0

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

उत्तर

1

कुछ भूमिकाओं के द्वारा समूहित अनुमतियों के साथ वास्तव में एक तालिका होने के बारे में और विस्तारित अनुमतियों के लिए एक और तालिका का उपयोग करें जो सामान्य लोगों को ओवरराइड करेगा। अगर यह केवल जॉन को कुछ पहुंचने का मामला है, तो यह भी उल्लेख क्यों करें कि एक दूसरे व्यक्ति नहीं कर सकता? उपरोक्त टिप्पणी में प्रदान किए गए अंतिम उदाहरण की तरह: क्या अनुमतियों वाली एक तालिका है। एक रिकॉर्ड दिखता है: 1645 edit_some_field। फिर group_permissions इस तरह दिखते हैं: 1645 everyone false और अंतिम अपवाद तालिका 1645 (Jane Doe's ID) true होगी।

हैं, तो मान लीजिए कि वहाँ 50 लोग हैं, जो उपयोग कर सकते है इस क्षेत्र को संपादित करने के लिए कर रहे हैं, तो आप जैसे समूह सारणी में एक और समूह जोड़ें: 89 editors_of_field_X, 89 (John Smith's ID) true की तरह एक मेज group_members में लोगों की आईडी डाल दिया। और फिर अंतिम चरण पर आप ऊपर वर्णित अनुसार एकल व्यक्ति की अनुमतियों वाले लोगों को ओवरराइड कर सकते हैं। तो निष्कर्ष में आपके पास 3-परत योजना होगी। हर कोई समूह व्यक्ति।और गहरा आप उस भूमिका के उच्च महत्व पर जाते हैं। उदाहरण के लिए यदि सभी को अनुमति नहीं है, लेकिन जिस समूह में आप हैं, तो आप कुछ संपादित कर सकते हैं।

इसके अलावा यदि आपको तीसरे व्यक्ति स्तर पर पहुंच के साथ अनुमति नहीं है, तो फिर, आप समूह में अपवाद बन गए। इस तरह आप बाद में समूहों का पुन: उपयोग करने में सक्षम होंगे, केवल मामूली परिवर्तन जोड़ रहे हैं।

+0

क्या होता है यदि एक व्यक्ति दो समूहों का सदस्य होता है, और किसी को संपादित करने की अनुमति है और दूसरा नहीं है? – wchargin

+0

अच्छा बिंदु। लेकिन यह प्रश्न के लेखक के निर्णय के लिए छोड़ा गया है: या तो अनुमति नहीं है, या नवीनतम की जांच या अनुमति नहीं है। –

+0

हे, @ एंड्रियस नारुसेविचियस, इतना विस्तार से जवाब देने के लिए समय निकालने के लिए धन्यवाद। चूंकि परियोजनाओं की समयसीमा है (मैंने पूछे जाने के 20 दिनों बाद पारित किया है), इसलिए मैं आगे बढ़ गया और मॉडल का वर्णन किया। हाँ उस जैसा। मैंने कुछ सुधार किए हैं। जैसे जब आप ऑब्जेक्ट के संबंध को परिभाषित करते हैं तो उपयोगकर्ता को परिभाषित करने के लिए कोई समझ नहीं आता है। मैं इसके बारे में कुछ लिखूंगा जिसके साथ मैं आया था और बाद में पोस्ट करूंगा। आपके उत्तर के अनुसार, मैं उस पर बाद में टिप्पणी करूंगा, लेकिन मूल रूप से वर्णन किया गया है कि रोले आधारित अभिगम नियंत्रण कैसे काम करता है। – svallory

1

जॉन ने एक आदेश बनाया और बॉब को इसे देखने देना चाहता है।

+0

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