11

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

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

परंपरागत रूप से, आप 'प्रबंधक, प्रशासक, कर्मचारी, सुपर उपयोगकर्ता' या जो भी हो, की तरह भूमिकाएं बनायेंगे। लेकिन अनुमतियों के संबंध में आप क्या करेंगे/क्या मुझे नियंत्रण का एक बेहतर अनाज माना जाता है? मुझे विस्तृत करें ....

मेरी एएसपीनेट एमवीसी साइट के भीतर मेरे पास प्रशासन, प्रबंधन, संदेश, रिपोर्टिंग इत्यादि जैसे विभिन्न क्षेत्र हैं। मैं इनमें से प्रत्येक के लिए 'प्रशासक', 'प्रबंधक', ' रिपोर्टर 'आदि उचित भूमिका के बिना, आप साइट के उस क्षेत्र तक पहुंच प्राप्त नहीं कर सकते हैं। तो मैं कक्षा के स्तर पर इसके साथ पूरे नियंत्रकों को बंद कर दूंगा।

लेकिन अब एक क्षेत्र को उदाहरण के रूप में लें; मैसेजिंग, और कहें कि मैं सीआरयूडी के लिए बेहतर अनाज अनुमति देना चाहता था; संदेश बनाएं, संदेश देखें/पढ़ें, संदेश संपादित करें, संदेश हटाएं आदि

अंत में मेरा प्रश्न। नियंत्रण के इस बेहतर अनाज को लागू करना सबसे अच्छा कैसे होगा? एक दृष्टिकोण जो मैं देखता हूं (सुनिश्चित नहीं है कि यह एक अच्छा है), सिर्फ सब कुछ के लिए एएसपीनेट सदस्यता भूमिकाएं बनाना है। तो मेरे पास हो सकता है ....

मैसेंजर (व्यापक स्तर की भूमिका), CreateMessage, ReadMessage, EditMessage, DeleteMessage।

एक ओर मैं कुछ उपयोगकर्ताओं को संदेश पढ़ने/देखने में सक्षम होना चाहता हूं। लेकिन जरूरी नहीं कि उन्हें बनाएं या हटाएं। व्यक्तिगत नियंत्रक कार्यों में विशिष्ट भूमिकाएं लागू हो सकती हैं।

क्या आपको इस दृष्टिकोण के साथ कोई समस्या है? क्या आपके पास एक बेहतर विचार है?

समाधान अब तक

मैं अपने खुद के स्कीमा बनाने और कस्टम सदस्यता और भूमिका प्रदाताओं को लागू करने का फैसला किया है। मेरी स्कीमा में शामिल हैं;

  • उपयोगकर्ता
  • UserProfile
  • अनुमति
  • PermissionAssignment
  • भूमिका
  • RoleAssignment

अगले एक या दो दिन के लिए दूर जा रहे हैं, लेकिन अधिक जानकारी जब से अपडेट हो जाएगी मुझे एक मौका मिलता है।

उत्तर

5

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

[Authorize(Entities.Message, Actions.Create)] 
public ActionResult CreateMessage() 

[Authorize(Entities.Message, Actions.Edit)] 
public ActionResult EditMessage() 

[Authorize(Entities.Message, Actions.View)] 
public ActionResult ViewMessage() 

उस स्थिति में आपके भूमिकाओं कि वे क्या बजाय पहुँच स्तर के एक अनम्य तरह से निर्धारित करने का सबसे अच्छा, सार अनुमतियाँ संग्रह करते हैं।

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

This एक समान प्रश्न है, बिल्कुल यहां बताया गया मामला नहीं है, लेकिन यह एक्शन पैरामीटर्स के साथ प्राधिकरण सत्यापन को विस्तारित करने का एक अच्छा प्रारंभिक बिंदु है।

+0

क्या यह थोड़ा और आगे लेना संभव है और न केवल "क्या यह क्रिया अनुमत है?" लेकिन कहने के लिए "क्या इस कार्रवाई को इस विशेष इकाई पर अनुमति दी गई है?" जैसे स्थिति डेविड रॉबिन्स बताती है कि प्रबंधक बी द्वारा बनाए गए संदेशों को हटाने के लिए प्रबंधक ए को अनुमति नहीं है? –

+0

कि विशेष परिदृश्य को क्रिया द्वारा संभाल लिया जा सकता है लेकिन प्राधिकरण के वास्तविक तर्क और ActionResult थोड़ा बदल जाएगा, पिछला संबंधित खोज दिखाता है कि आप इसे कैसे संग्रहीत कर सकते हैं, http: //stackoverflow.com/questions/2872588/asp- नेट-एमवीसी-प्रमाणीकरण-अनुमति-से-उपयोग-मॉडल-कक्षाएं/2878159 # 2878159 – JOBG

+0

धन्यवाद उमर, मैं इस पर थोड़ा और काम कर रहा हूं और जब मैं कहां हूं, वहां कुछ और जानकारी के साथ अपडेट हो जाएगा। चीयर्स। –

-1

साथ ही साथ अपने नियंत्रक के ऊपर [Authorize(Roles="Administrator")] आदि जोड़ना। तुम भी indiviual क्रिया भी

+0

मैंने वास्तव में मेरे प्रश्न में इसका उल्लेख किया था। "... व्यक्तिगत नियंत्रक कार्यों में विशिष्ट भूमिकाएं लागू हो सकती हैं।" –

2

अपने CRUD उदाहरण के संबंध में, तुम सच में प्राधिकरण के बारे में बात नहीं कर रहे हैं पर उस विशेषता रख सकते हैं, और प्राधिकरण सदस्यता भूमिकाओं "प्रबंधक" और "रिपोर्टर" के बीच भिन्न हैं?मुझे लगता है कि यदि आप भूमिकाओं को पढ़ने और संदेशों के बीच प्राधिकरण लिखने के बीच अंतर नहीं करते हैं तो भूमिका निभाने वाली गतिविधियों के लिए आपको एक अलग तंत्र बनाने की आवश्यकता है।

यदि आप प्रत्येक क्रिया के लिए भूमिका निभाना चाहते थे - EditMessage, DeleteMessage - आप इस मामले में क्या करेंगे जब प्रबंधक ए प्रबंधक बी के लिए संदेशों को हटाने में सक्षम नहीं होना चाहिए?

+0

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

+0

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

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