क्या किसी को एएसपी.NET एमवीसी वेबसाइट के भीतर चिंताओं को अलग करने के दौरान रिकॉर्ड-स्तरीय प्राधिकरण को लागू करने के लिए एक अच्छी पद्धति पर कोई सुझाव है?रिकॉर्ड-स्तर प्राधिकरण के लिए एमवीसी/एएसपी.Net सर्वश्रेष्ठ अभ्यास
PrincipalPermission साथ, आप के साथ एक विधि को सजाने कर सकते हैं:
PrincipalPermission(SecurityAction.Demand, Role = "GroupLeader")
की आवश्यकता होती है जो उस पृष्ठ से किसी भी आगंतुक तय भूमिका "GroupLeader" का सदस्य होना। आवश्यक है कि उस पृष्ठ पर किसी भी आगंतुक सामान्य रूप से एक समूह का प्रबंधन करने की अनुमति दी जानी
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Manage", Resource = "Group")]
:
वैकल्पिक रूप से, आप के साथ एक विधि को सजाने कर सकते हैं।
हालांकि, इनमें से कोई भी वास्तव में परिदृश्य को संबोधित नहीं करता है जिसमें उपयोगकर्ता को कुछ समूहों को संपादित करने की अनुमति हो सकती है, लेकिन दूसरों को नहीं। जहां तक मैं कह सकता हूं, भले ही मैं एक कस्टम ClaimsAuthorizationManager
लागू करता हूं, सशर्त प्राधिकरण करने के लिए विधि पैरामीटर तक पहुंच प्राप्त करने का कोई तरीका नहीं है।
इसके अतिरिक्त, उपर्युक्त दोनों विधियां सिर्फ SecurityException
फेंक देती हैं यदि उपयोगकर्ता के पास किसी पृष्ठ पर उपयोगकर्ता को शानदार रूप से रीडायरेक्ट करने की विधि देने की बजाय अनुमति नहीं है जो बताती है कि क्या हुआ और आवश्यक प्राधिकरण प्राप्त करने के लिए वे क्या कर सकते हैं ।
जाहिर है, मुझे यह भी एहसास है कि मैं केवल विधि में प्रमाणीकरण तर्क कोड कर सकता हूं और तदनुसार रीडायरेक्ट कर सकता हूं, लेकिन यदि संभव हो तो मैं इसे अलग कर दूंगा, और विधि कोड को वास्तव में अनुरोध को संसाधित करने के लिए केवल साफ रखूंगा एक ढांचे के भीतर काम करने में सक्षम होने के लिए जो अधिक सामान्य रूप से लागू किया जा सकता है।
तो, क्या इस परिदृश्य को संभालने के लिए "आउट ऑफ़ द बॉक्स" तरीका है, या क्या मुझे कस्टम IAuthorizationFilter
लागू करना है? मुझे लगता है कि मैं रिकॉर्ड-स्तरीय प्रमाणीकरण और सुंदर रीडायरेक्ट दोनों को संभाल सकता हूं, लेकिन विधि स्तर पर किसी भी पैरामीटर के बिना, यह अनिवार्य रूप से एक विशाल if ... else if
कथन होगा।
बॉक्स से कुछ भी नहीं है, लेकिन आपको एक विशाल 'अगर नहीं' की आवश्यकता नहीं है। प्राधिकरण फ़िल्टर में आपके पास अनुरोध है, इसलिए आप वहां से सामान प्राप्त कर सकते हैं। – Shoe
जो सवाल आप वास्तव में पूछ रहे हैं वह है "क्या मैं _this_ ऑब्जेक्ट पर ऑपरेशन कर सकता हूं?" मैं वास्तव में इस से संबंधित कुछ खोज कर रहा हूं, और मैं अभी तक एक अच्छे समाधान में नहीं आया हूं। असल में, आप [विवेकाधीन एक्सेस कंट्रोल] चाहते हैं (http://en.wikipedia.org/wiki/Discretionary_access_control)। विकिपीडिया इसका वर्णन करता है, लेकिन मुझे अभी तक इसके लिए एक ठोस प्रोग्रामिंग पैटर्न नहीं मिला है।"Descretionary Access Control" उत्तर की तरह लगता है, लेकिन मुझे अधिक शोध की आवश्यकता है, क्योंकि यह मुख्य रूप से सिस्टम संसाधनों (जैसे फ़ाइल सिस्टम या कंप्यूटर) पर केंद्रित है। –