7

मैं PHP और MySQL का उपयोग कर एक वेब एप्लिकेशन बनाने वाली टीम का हिस्सा हूं। आवेदन में विभिन्न भूमिकाओं के साथ कई उपयोगकर्ता होंगे। आवेदन भौगोलिक रूप से वितरित तरीके से भी उपयोग किया जाएगा। तदनुसार हम निम्नलिखित दो स्तरों पर एक अभिगम नियंत्रण प्रणाली है कि चल रही है बनाने की जरूरत:PHP एक्सेस कंट्रोल सिस्टम

  1. विशिष्ट PHP पृष्ठों के लिए नियंत्रण उपयोगकर्ता अनुमतियों अर्थात प्रदान करता है या विशिष्ट पृष्ठों (या उपयोगकर्ता इंटरफ़ेस तत्वों) उपयोगकर्ता की भूमिका के आधार पर करने के लिए उपयोग से इनकार करते हैं। उदाहरण के लिए: किसी उपयोगकर्ता को "छात्र" पृष्ठ तक पहुंच की अनुमति दी जा सकती है लेकिन "शिक्षक" पृष्ठ पर नहीं।
  2. विशिष्ट डेटाबेस रिकॉर्ड्स के लिए उपयोगकर्ता अनुमतियों को नियंत्रित करता है यानी डेटाबेस क्वेरीज को संशोधित करता है ताकि केवल विशिष्ट रिकॉर्ड प्रदर्शित किए जा सकें। उदाहरण के लिए, शहर के स्तर पर उपयोगकर्ता के लिए, केवल उन रिकॉर्डों को प्रदर्शित किया जाना चाहिए जो उपयोगकर्ता के विशेष शहर से संबंधित हैं, जबकि राष्ट्रीय स्तर पर उपयोगकर्ता के लिए, देश में सभी सीटियों के लिए रिकॉर्ड प्रदर्शित किए जाने चाहिए।

मुझे ऐसे सिस्टम को डिजाइन करने में मदद की ज़रूरत है जो इन प्रकार के अभिगम नियंत्रण को नियंत्रित कर सके। प्वाइंट नंबर 1 काफी सरल लगता है। हालांकि, SQL क्वेरी में जानकारी को हार्डकोड किए बिना पॉइंट नंबर 2 को कैसे करें, इस पर पूरी तरह से नुकसान हुआ है।

किसी भी मदद की सराहना की जाएगी।

अग्रिम

विनायक

उत्तर

12

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

alt text http://gruz.epsi.pl/g/uml/permissions.png

और अनुक्रम आरेख कि कॉल दिखाता है आदेश:

alt text http://gruz.epsi.pl/g/uml/permissions-s2.png

I blogged about this solution, दुर्भाग्य से यह पोलिश में सभी है, लेकिन आप कोड और चित्र काम के टुकड़े मिल सकता है। मैं क्या कह सकता, कार्यान्वयन केक का एक टुकड़ा नहीं है, लेकिन प्रदर्शन के लिहाज से यह एक चैंपियन है जब पुनरावृत्ति पहुंच सूची में प्रत्येक तत्व के लिए जाँच की तुलना में। इसके अलावा, उपरोक्त आधारभूत संरचना सूची में केवल एक ही प्रकार की वस्तुओं को संभालती है। जब अलग-अलग सूचियां तक ​​पहुँचने यह काम करते हैं, यह शहरों, देशों, उत्पादों, या दस्तावेजों की सूची के रूप में लंबी सूची पर आइटम को लागू IAuthorizable इंटरफेस के रूप में हो सकता है।

+0

हाय, मुझे इसका पुराना उत्तर पता है, लेकिन मुझे बस [यूएमएल क्लास आरेख] (http://en.wikipedia.org/wiki/Class_diagram) पर कुछ स्पष्टीकरण की आवश्यकता है, विभिन्न प्रकार के तीरों का क्या मतलब है ?, (ठोस, धराशायी और भूरे रंग के) – Triztian

+1

@ ट्राइज़टियन - तीर वाले ठोस वाले विधि विधि कॉल हैं, धराशायी लंबवत रेखाएं जीवन रेखा का प्रतिनिधित्व करती हैं, और धराशायी क्षैतिज रेखाएं अक्सर वापसी का प्रतिनिधित्व करती हैं –

1

धन्यवाद आपकी समस्या का ब्यौरा लेकिन Zend फ्रेमवर्क घटकों आप को देखने के लिए चाहते हो सकता है की एक नहीं बल्कि शक्तिशाली ACL और AUTH सेट है के बारे में पता नहीं है। अच्छी चीजें जैसे कि सटीक पहुंच नियंत्रण, दृढ़ता के लिए डेटा संग्रहित करना, उन्नत सशर्त नियम।

1

यह तुम क्या जरूरत है की तरह मुझे लगता है यह है: (मैं एक ऐसे देश/राज्य/शहर उदाहरण का उपयोग करेंगे)

  1. सभी देशों की एक सूची। प्रत्येक "देश" में एक आईडी है।
  2. देशों के भीतर सभी राज्यों की एक सूची। प्रत्येक राज्य coutnry की आईडी के लिए बाध्य है, लेकिन इसकी अपनी अद्वितीय आईडी भी है।
  3. सभी शहरों की एक सूची। प्रत्येक शहर या तो एक राज्य, या सीधे एक देश के लिए बाध्य है, और यह संकेत करने के लिए एक ध्वज है।

किसी शहर के उपयोगकर्ता के लिए, जाहिर है कि उन आईडी से मेल खाने वाले शहर से संबंधित केवल उन रिकॉर्डों को खोजें और प्रदर्शित करें। किसी राज्य या राष्ट्रीय स्तर के लिए, प्रत्येक शहर से संबंधित सभी रिकॉर्ड्स की खोज करें जिनके पास उस आईडी से मिलान करने वाला आईडी है (या राज्य या आपके पास क्या है)।

तो मूल रूप से, प्रत्येक उप समूह इसके ऊपर के समूह पर निर्भर है, और हालांकि मुझे सही ढंग से याद नहीं है, मुझे विश्वास है कि आप वहां से चाल करने के लिए उप प्रश्नों का उपयोग कर सकते हैं।

+0

हाय लेकिन इसका मतलब यह है कि खोज क्वेरी को प्रत्येक स्तर के उपयोगकर्ता के लिए अलग-अलग लिखा जाना चाहिए। मेरा मुद्दा यह है कि एक ही क्वेरी को उपयोगकर्ता के स्तर के आधार पर परिणामों के अलग-अलग सेट को वापस करने का तरीका ढूंढना है। – Vinayak

+0

@ vinayak.myopenid.com, अगर आपको एसक्यूएल सर्वर को पता है कि आपके पास कौन सा एक्सेस स्तर है, तो आपको एक अलग क्वेरी का उपयोग करना होगा। ऐसा लगता है कि जहां के साथ एक WHERE खंड में अभिव्यक्तियों का सामना करके अनुमतियों को संभाला जाएगा। बहुत आसान लगता है। – strager

0

यदि आपको नहीं पता कि यह कैसे करना है, तो मैं ज़ेंड फ्रेमवर्क, केकेपीएचपी, या सिम्फनी जैसे PHP फ्रेमवर्क का उपयोग करूंगा। उन्होंने आपके लिए भारी भारोत्तोलन किया है और पहले से ही कुछ प्रकार की एक्सेस कंट्रोल स्कीम है।

0

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

मैं पहले से ही समाधान को लागू करने में किसी को खोजने के लिए खत्म हो गया देख रहा था, लेकिन यह कोई नहीं किया था लगता है। आइए आशा करते हैं कि यह असफल नहीं होगा :)

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