2016-08-25 6 views
5

मैं इस संरचना के साथ एक MVC आवेदन पर काम कर रहा हूँ:PHP - एक एमवीसी आवेदन में आरबीएसी और प्रमाणीकरण कहां रखा जाए?

Request 
     V 
FrontController <-> Router 
     V 
    Controller <-> Model 
     V 
    View 

मैं दो अन्य घटकों है कि मैं इस संरचना में जगह की जरूरत है:

  • Authentification: $_SESSION का उपयोग करने में उपयोगकर्ता के लॉग वैश्विक चर;
  • RBAC: भूमिका के आधार अभिगम नियंत्रण जांच कर सकते हैं कि एक भूमिका एक "ressource" (Controller विधि) के लिए दी गई एक्सेस है, तो।

प्रत्येक उपयोगकर्ता के पास कोई भी भूमिका निभाई जा सकती है (वे भी कोई नहीं हो सकते हैं)।

अब, मैं मैं उन्हें करने में सक्षम होने की जरूरत है मेरी अनुप्रयोगों में उन दो घटक जगह की जरूरत है,:

  • तो User authed नहीं है और है कि Request एक authed User निष्पादित करने की आवश्यकता है, ग्राहक को लॉगिन पृष्ठ पर रीडायरेक्ट किया जाना चाहिए;
  • RBAC देखता authed User एक भूमिका Controller पर अमल करने के लिए आवश्यक "ressource" के लिए दी गई पहुँच गया है कि नहीं है कि अगर की विधि, Controller की पद्धति अभी भी निष्पादित किया जाना चाहिए, लेकिन ज्ञान के साथ कि User ऐसा करने के लिए (उदाहरण अनुमति नहीं था: एक User एक लेख लिखते हैं, लेकिन यह प्रकाशित करने का अधिकार नहीं है, इसलिए लेख एक ड्राफ्ट के रूप में सहेजा जाता है और User बताया जाता है कि एक Moderator होगा इसे प्रकाशित करने के लिए)।

मैं पहले से ही कुछ विचार है जहां Authentification और RBAC पता लगाने के लिए, लेकिन मुझे यकीन है कि नहीं कर रहा हूँ:

  • AuthentificationFrontController या Router में जा सकते हैं;
  • RBACFrontController या Controller में जा सकता है।

मैंने देखा कि किसी ने मॉडल में RBAC डाला है लेकिन मुझे समझ में नहीं आता है।

मुझे इस विषय पर कुछ अंतर्दृष्टि चाहिए। मुझे Authentification और RBAC घटक कहां रखना चाहिए?

धन्यवाद!

उत्तर

1

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

अधिकांश ढांचे में आपके द्वारा वर्णित प्रमाणीकरण की जांच के परीक्षण के लिए एक तंत्र है - नाम भिन्न होते हैं लेकिन मैंने अक्सर इसे "मिडलवेयर" कहा है।

भूमिका आधारित अभिगम नियंत्रण पूरी तरह से आपके कार्यान्वयन है।

+0

आप प्रमाणीकरण और प्रमाणीकरण के बीच अंतर के बारे में बात कर रहे हैं। और आरबीएसी "पूरी तरह से आपके कार्यान्वयन" नहीं है: http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf –

2

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

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

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

विचार करने की एक बात है, हालांकि: मॉडल में कुछ आरबीएसी की ज़रूरत भी हो सकती है। यही है, कुछ भूमिकाओं में कुछ मॉडलों में कुछ क्षेत्रों तक सीमित पहुंच हो सकती है: भूमिका ए मॉडल एक्स के सभी तक पहुंच सकता है, लेकिन रोल बी केवल मॉडल एक्स के फ़ील्ड 1, 2 और 3 पढ़ सकता है। (मेरा विश्वास करो, मैंने बहुत देखा है , भूमिकाओं के चारों ओर बहुत जटिल नियम जो देख सकते हैं और किस क्षेत्र पर कार्य कर सकते हैं।)

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

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

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