.NET अनुप्रयोग के लिए अनुमतियाँ / सही मॉडल / पैटर्न


9

मुझे लचीला और सरल (यदि ऐसी कोई चीज मौजूद है) लागू करने की आवश्यकता है और उसी समय यदि संभव हो तो अंतर्निहित साधनों का उपयोग करें

अब तक मेरे पास मेम्बरशिपप्रोवाइडर और रोलप्रोवाइडर्स हैं। यह शांत है लेकिन मैं आगे कहां जाऊं?

मुझे लगता है कि मुझे "प्रिविलेज" शब्द जोड़ने की जरूरत है और हार्डकोड के अंदर जो अनुप्रयोग के अंदर है। उपयोगकर्ता रोल में प्रिविलेज को जोड़ने और उपयोगकर्ताओं को रोल्स असाइन करने के लिए भूमिकाओं को कॉन्फ़िगर करेंगे।

क्या यह एक अच्छे मॉडल की तरह लगता है? क्या मुझे उन्हें रोल्स में जोड़ने के लिए उपयोगकर्ता स्तर पर निजीकरण जोड़ने के बारे में सोचना चाहिए? मैं सेटअप (भ्रामक) और निम्नलिखित समर्थन के साथ समस्याओं की कल्पना कर सकता हूं।

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

इस तरह की व्यवस्था के लिए कोई चांदी की गोली? और क्यों Microsoft आगे नहीं गया तो बस सदस्यता और भूमिका प्रदाता?

एक और विचार: रोल्स को "निजीकृत" धारक के रूप में छोड़ दें और उन्हें हार्डकोड करें। तब मैं सभी उपलब्ध मार्कअप / विशेषताओं, आदि का उपयोग करके ऐप के अंदर उन भूमिकाओं को कोड कर सकता हूं - सभी Microsoft।

नई इकाई "समूह" जोड़ें और इस तरह से संबंध बनाएं

  • उपयोगकर्ता
  • यूसर समूह
  • समूह
  • RoleGroups
  • भूमिकाएँ

इस तरह मैं रोल्स को समूहों में इकट्ठा कर सकता हूँ और उन समूहों को उपयोगकर्ताओं को सौंप सकता हूँ। बहुत अच्छा लगता है और अन्य सॉफ्टवेयर पैटर्न से मेल खाता है। लेकिन तब मैं वास्तव में रोलपॉइडर के अंदर की चीजों को लागू नहीं कर सकता जैसे:

  • AddUsersToRoles
  • RemoveUsersFromRoles

और कुछ चीजों का वास्तव में कोई मतलब नहीं है क्योंकि वे हार्ड-कोडेड होंगे

  • DeleteRole
  • CreateRole

जवाबों:


5

यदि भूमिका-आधारित प्राधिकरण आपके लिए पर्याप्त नहीं है, तो दावा-आधारित प्राधिकरण का उपयोग करने पर विचार करें ।

एक दावा एक संसाधन और गतिविधि का वर्णन करता है - एक एसीएल में एक प्रविष्टि की तरह, लेकिन अधिक लचीला, क्योंकि "संसाधन" में भौतिक वस्तु नहीं होना चाहिए, यह कुछ भी हो सकता है जिसे आप चाहते हैं और इसमें कोई भी जानकारी हो सकती है तुम्हें चाहिए।

इस मॉडल में, एक दावे के बराबर है जिसे आप "विशेषाधिकार" कहते हैं, और आप दावे के सेटों में समूह का दावा करते हैं, जो कि आप एक "भूमिका" कह रहे हैं। ये सभी API और बहुत से System.IdentityModelनामस्थान में पहले से मौजूद हैं ।

बेशक आप का उल्लेख MembershipProviderऔर RoleProviderऔर यदि आप सभी ASP.NET सदस्यता मॉडल में इस रटना (के रूप में उन नामों का मतलब) कोशिश कर रहे हैं, तो इसके बारे में सिर्फ भूल जाते हैं। यदि आप उन प्रदाता एपीआई का उपयोग करना चाहते हैं, तो आपको इसे अपने तरीके से करना होगा, और उनके तरीके से किसी भूमिका की अवधारणा से अधिक दानेदार नहीं मिलेगा।

इसके बजाय, ASP.NET में, "विशेषाधिकार" की अवधारणा वास्तव में एक्शन या ऑपरेशन स्तर पर एन्कोडेड है, जहां आप घोषणा करते हैं कि किस भूमिका को उस कार्रवाई को निष्पादित करने की अनुमति है। ASP.NET MVC से निपटने के लिए यह वास्तव में बहुत आसान है जहां आप [AuthorizeAttribute]नियंत्रक या नियंत्रक कार्यों पर थप्पड़ मारते हैं ; "पुराने स्कूल में" ASP.NET, आप घटनाओं को संभाल रहे हैं, इसलिए प्राधिकरण या तो तदर्थ या पृष्ठ स्तर (या दोनों) पर जाता है।


बहुत सारी जानकारी, धन्यवाद! ऐप वास्तव में WCF Restful सेवा के रूप में उजागर सर्वर के हिस्से के साथ सिल्वरलाइट ऐप है। दावा-आधारित दिलचस्प लगता है, लेकिन मैंने उपयोगकर्ता की अवधारणा और इसके अंदर के ऑटोराइजेशन पर ध्यान नहीं दिया। दिलचस्प लेख मुझे अभी मिला: geekswithblogs.net/shahed/archive/2010/02/05/137795.aspx
katit

@katit: .NET में लगभग सभी प्रमाणीकरण / प्राधिकरण IPrincipal इंटरफ़ेस पर आधारित है । आप दावों के आधार पर प्राधिकरण कर रहे हैं तो आप एक का उपयोग IClaimsPrincipal उस के लिए, और कच्चा IPrincipalको IClaimsPrincipalजब आप दावा चेकों करना चाहते हैं। यदि आप इसे (उदाहरण के लिए) प्रपत्र प्रमाणीकरण के साथ फिट करना चाहते हैं, तो आप अपने स्वयं के बहुत सारे कोड लिख रहे होंगे, लेकिन जाहिर है यह किया जा सकता है (लिंक के अनुसार)।
आरोन

सवाल यह है .. शायद सदस्यता / भूमिका प्रदाताओं के लिए एक और "समूह" स्तर जोड़ना या स्वयं प्रदाता लिखना आसान है? माइक्रोसॉफ्ट के लोगों को लागू करने के रूप में बहुत अधिक काम की राशि
katit

3
@ कटिट: प्रसिद्ध अंतिम शब्द। जब तक आपके पास अपना खुद का आविष्कार करने का एक बहुत अच्छा कारण न हो ("यह आसान लगता है" एक अच्छा कारण नहीं है, तब तक यह केवल तब ही आसान नहीं होता है, यह केवल तब आसान लगता है, जब आपके पास कोई प्रत्यक्ष अनुभव न हो और इस तरह न्यायाधीश की योग्यता न हो; आवश्यक कार्य की राशि)।
आरोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.