7

में अनुमति-आधारित प्राधिकरण मैं मौजूदा वेबफॉर्म एप्लिकेशन में एएसपी.नेट एमवीसी जोड़ रहा हूं। समय के लिए, मुझे प्रमाणीकरण/लॉगिंग की परवाह नहीं है, क्योंकि इस भाग को मौजूदा कोड (फॉर्म प्रमाणीकरण) द्वारा नियंत्रित किया जाता है।एएसपी.नेट एमवीसी 3

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

जैसा कि मैं समझता हूं, एएसपी.नेट एमवीसी के लिए मानक AuthorizeAttribute है जहां मैं भूमिकाएं निर्दिष्ट कर सकता हूं। मैं भी कुछ लेख जो भूमिकाओं के बजाय निर्दिष्ट करने अनुमतियों का सुझाव मिला - तो यह कुछ इस तरह करना संभव नहीं है:

[CustomAuthorize(Roles = "View products, Edit products")] 

AuthorizeAttribute विस्तार करके, मैं भी परिभाषित कर सकते हैं मैं कैसे की दुकान और पहुँच अनुमतियाँ।

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

+0

क्या यह यहां की कोशिश की गई थी: http://stackoverflow.com/questions/10338734/custom-security-scenario-in-asp-net-mvc/ – antijon

+0

@antijon जहां तक ​​मैं समझता हूं, यह समान है एक कस्टम AuthorizeAttribute लागू करना। लेकिन मैं अन्य विकल्पों और उनके पेशेवरों और विपक्ष के बारे में अधिक जानकारी प्राप्त करना चाहता हूं। –

उत्तर

7

सबसे पहले आपको समझना है कि वेबफॉर्म की तरह, एमवीसी में एक पाइपलाइन है। प्रत्येक अनुरोध कई तरीकों से गुजरता है, और इस तरह विस्तार बिंदु हैं कि आप "हुक" कर सकते हैं और चीजें कर सकते हैं।

सभी प्राधिकरण एट्रिब्यूट ऑनअधिकृतता विस्तार बिंदु में हुक है, और यह तय करता है कि किसी को किसी दिए गए मानदंडों के आधार पर उपयोग करना है या नहीं (उपयोगकर्ता नाम, भूमिकाएं, आदि ..)।

यहाँ एक उदाहरण है: http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx

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

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

आपके मूल रूप से दो अन्य उचित विकल्प हैं। Application_AuthenticateRequest (अनुशंसित नहीं) में global.asax में एक हैंडलर लागू करें या एक सामान्य बेसकंट्रोलर बनाएं जिसे आप ऑनअधिकृत करें (विशेषता हुक एक ही चीज़ है, लेकिन एक अलग जगह पर)।

बहुत से लोग सत्र चर का उपयोग करके प्रमाणीकरण करने का प्रयास करते हैं, और यह करना सबसे बुरी चीज है।

चूंकि हम आपके प्रमाणीकरण और अनुमति प्रणाली के बारे में कुछ भी नहीं जानते हैं, हम जो भी कर सकते हैं, वह सामान्य सलाह प्रदान कर सकता है।

+0

आपके उत्तर के लिए धन्यवाद!प्रमाणीकरण के संबंध में - यह फ़ॉर्म एथ के माध्यम से और एक कस्टम उपयोगकर्ता वर्ग का उपयोग कर सिर्फ एक उपयोगकर्ता नाम/पासवर्ड लॉगिन है। अनुमति प्रणाली के संबंध में - प्रत्येक पृष्ठ के लिए हमारे पास "मॉड्यूल कुंजी" परिभाषित है, और हम प्रत्येक उपयोगकर्ता को प्रत्येक पृष्ठ तक पहुंचने के लिए डेटाबेस अनुमतियों में संग्रहीत करते हैं। अधिकारों की जांच वर्तमान में 'बेसपेज: पेज' में लागू की गई है। मुझे यकीन नहीं है कि क्या वह जानकारी है जिसे आप जानना चाहते हैं? –

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