2011-03-07 17 views
6

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

  • एक उपयोगकर्ता एक या अधिक भूमिकाएं का हिस्सा हो सकते हैं:

    यहाँ मेरी आवश्यकताएँ हैं।

  • भूमिकाओं को किसी भी "अनुमतियों" (कई से कई) में मैप किया जा सकता है। अनुमति कुछ अन्य उपयोगकर्ताओं की पोस्ट संपादित कर सकती है "।

  • प्रत्येक नियंत्रक कार्रवाई एक या अधिक भूमिकाओं तक पहुंच की अनुमति दे सकती है (या सार्वजनिक पृष्ठों के लिए कोई प्राधिकरण आवश्यक नहीं हो सकता है)।

  • मुझे "फीचर-लेवल" नियंत्रण की भी आवश्यकता होगी जिस पर भूमिकाएं विभिन्न तत्वों को एक दृश्य पर देख/अपडेट कर सकती हैं। इन बनाम भूमिकाओं को चलाने के लिए अनुमतियों का उपयोग कर सकते हैं।

  • एक साइड नोट के रूप में, मैं शायद सदस्यों को अपने फेसबुक और/या ट्विटर खातों का उपयोग करके साइन अप करने की अनुमति भी दूंगा। लेकिन यह मेरे कस्टम सदस्यता कार्यान्वयन से स्वतंत्र रूप से किया जा सकता है, यदि यह उचित है (यानी साइनअप पर एक कस्टम उपयोगकर्ता बनाएं, तो उसे एफबी/ट्विटर खाते से जोड़ दें)।

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

उदाहरण के लिए, मैंने कुछ "दावा आधारित" प्रमाणीकरण बनाम "भूमिका आधारित" के बारे में कुछ पढ़ा है, लेकिन मुझे यकीन नहीं है कि मैं कॉल करने के लिए पर्याप्त मतभेदों को समझता हूं, न ही मौसम या उन्हें एएसपी.NET सदस्यता की आवश्यकता नहीं होती है। मैंने आईप्रिनिपियर और IIDentity को लागू करके और नियंत्रक पहुंच को चलाने के लिए एक्शन फ़िल्टर का उपयोग करके कस्टम सदस्यता बनाने के बारे में भी पढ़ा है, लेकिन मुझे ऐसा करने के लिए कोई व्यापक मार्गदर्शिका नहीं मिल रही है, और मैं अभी भी एक्शन फ़िल्टर के साथ काफी हरा हूं।

मुझे यह भी सुनिश्चित नहीं है कि मुझे साइनअप, प्रमाणीकरण, पासवर्ड भूल गए आदि के लिए .NET के अंतर्निर्मित नियंत्रणों का उपयोग करना चाहिए या नहीं। मेरा वृत्ति नहीं है, क्योंकि मुझे आमतौर पर इन्हें स्वयं बनाना पसंद है, और मैं ' मैं यह भी सुनिश्चित नहीं करता कि वे कस्टम सेटअप में काम करेंगे या नहीं। लेकिन अगर मैं गलत हूं, तो मुझे बताएं।

अग्रिम धन्यवाद।

+0

आपको मेरा दृष्टिकोण पसंद हो सकता है http://stackoverflow.com/questions/3964989/how-to-pass-current-user-information-to-all-layers-in-ddd/3969014 # 3969014 –

उत्तर

4

याद रखें कि एएसपी.NET प्रमाणीकरण/प्राधिकरण ढांचे में 2 अलग-अलग हिस्से हैं। पहला सदस्यता और भूमिका प्रदाताओं के साथ पहला अंत है और फिर SqlMembershipProvider और SqlRoleProvider का उपयोग करके बैक-एंड है।

मेरे व्यक्तिगत अनुभव में, मुझे सदस्यता प्रदाता और रोलप्रोवाइडर के अपने स्वयं के कस्टम संस्करणों को लिखना सबसे आसान लगता है। मुझे लगता है कि यह आपकी आवश्यकताओं में से प्रत्येक को संतुष्ट करेगा।

अद्यतन: जारेड मुझसे पूछा: "यह MembershipProvider और RoleProvider लागू करने लगता है भूमि के ऊपर (और फुलाना) का एक बहुत कहते हैं कि मैं/उपयोग की जरूरत कभी नहीं होगा यह अभी भी जाने के लिए रास्ता नहीं है मैं ऐसा करने से क्या लाभ है।? इस?"

मुझे लगता है कि अगर आप प्रमाणीकरण/प्रमाणीकरण ढांचे का उपयोग करते हैं, तो आप सामानों में बहुत से निर्माण का लाभ उठा सकते हैं। उदाहरण के लिए आप [Authorize(Roles = "DefaultUser")] जैसे भूमिकाओं के आधार पर नियंत्रकों को उनके तरीकों के प्राधिकरण को सजाने के लिए तैयार कर सकते हैं। इसके अलावा आप इस प्रकार के विचारों में कोड सीधे पता चल सके कि तरह की जरूरत:

<% if (Request.IsAuthenticated) { %> 
<p>Only authenticated users see this.</p> 
<% } %> 

इसके अलावा, प्रमाणीकरण/प्राधिकरण भूमिका/उपयोगकर्ता कुकीज़ को स्थापित करने और उन्हें एन्क्रिप्ट करने के गंदे काम का ख्याल रखता है आप अपने खुद के रोल है, तो यह कुछ है। आपको खुद करना है।

जेरेड भी चाहता है, "एक उपयोगकर्ता सीए n एक या एकाधिक भूमिकाओं का हिस्सा बनें। "और" भूमिकाओं को किसी भी "अनुमतियों" (कई से कई) में मैप किया जा सकता है। अनुमति कुछ अन्य उपयोगकर्ताओं की पोस्ट संपादित कर सकती है "।

मैं भूमिकाओं और अनुमतियों को एक ही चीज़ पर विचार करता हूं। इसलिए एक उपयोगकर्ता के पास कई भूमिकाएं और अनुमतियां हो सकती हैं। "CanEditPosts" "Admin" आदि की तरह

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। मैं समझने की कोशिश कर रहा हूं कि यह मुझे क्या लाभ देता है, यद्यपि? मेरे पास पहले से ही सेवा विधियां हैं जिनका उपयोग मैं उपयोगकर्ताओं को बनाने और उन्हें प्रमाणीकृत करने के लिए कर रहा हूं। [इस आलेख] को देख रहे हैं (http://mattwrock.com/post/2009/10/14/Iplementing- कस्टम- सदस्यता- प्रदाता- और- रोल- प्रदाता-for-Authinticating-ASPNET-MVC- अनुप्रयोग .aspx), ऐसा लगता है कि सदस्यता प्रदाता और रोलप्रोवाइडर लागू करने से बहुत अधिक ओवरहेड (और फ्लफ) जोड़ता है जिसे मुझे कभी भी आवश्यकता/उपयोग नहीं करना पड़ेगा। क्या यह अभी भी जाने का रास्ता है? ऐसा करने से मुझे क्या फायदा होता है? एक बार फिर धन्यवाद। –

+0

@ जेराड - मैंने उपरोक्त आपके अंक को संबोधित करने के लिए कुछ टिप्पणियां जोड़े ... – Keltex

+0

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

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