asp.net - net - डॉट नेट क्या है




ग्राहक-कॉन्फ़िगर करने योग्य एएसपी.एन.नेट साइट सुरक्षा और पृष्ठ के उपयोग के ठीक-ठीक नियंत्रण के लिए (4)

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

मानक web.config सुरक्षा (सक्रिय निर्देशिका, या रूपों प्रमाणीकरण (एएसपी 2 एसक्यूएल सर्वर स्कीमा या अपना खुद का) के साथ एकीकृत खिड़कियों के साथ संयोजन में उपयोग करें

<asp:LoginView id="LoginView1" runat="server">
                    <RoleGroups>
                        <asp:RoleGroup Roles="Admin">
                            <ContentTemplate>
                                <asp:LoginName id="LoginName2" runat="Server"></asp:LoginName>, you
                                are logged in as an administrator.
                            </ContentTemplate>
                        </asp:RoleGroup>
                        <asp:RoleGroup Roles="User">
                            <ContentTemplate>
                                <asp:Button id="Button1" runat="Server" OnClick="AllUserClick">
                            </ContentTemplate>
                        </asp:RoleGroup>
                    </RoleGroups>
                </asp:LoginView>

मेरे पास एएसपी.नेट 2.0 है [कोई एजेक्स नहीं ... अभी तक] वेब साइट जो एकाधिक ग्राहक साइटों पर संकलित रूप में तैनात की जाएगी। आमतौर पर साइट केवल इंट्रानेट होगी कुछ ग्राहक अपने सभी लोगों पर भरोसा करते हैं और साइट और / या पेज फ़ंक्शंस तक पहुंच को सीमित करने के बारे में परवाह नहीं करते हैं, दूसरों को किसी पर भरोसा नहीं है और केवल कुछ लोगों और / या समूहों को कुछ पन्नों को देखने में सक्षम होने के लिए, कुछ बटन पर क्लिक करें, और अल।

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

प्रारंभिक बिंदु के रूप में, मैं सोच रहा हूं कि साइट में प्रत्येक पृष्ठ / फ़ंक्शन बिंदु को एक पहचान दी जाती है और अनुमति समूह से जुड़े ...

संपादित करें: web.config प्राधिकरण अनुभाग की भूमिका और उपयोगकर्ता द्वारा पहुंच को अस्वीकार करने / अस्वीकार करने के लिए अच्छा है, लेकिन यह समस्या का केवल आधा है - दूसरे आधे प्रत्येक पृष्ठ पर व्यक्तिगत तरीकों (बटन, जो कुछ भी) तक पहुंच नियंत्रित कर रहे हैं उदाहरण के लिए, कुछ उपयोगकर्ता क्याचैमैकलिट देख सकते हैं जबकि अन्य को संपादित करने, बनाने, हटाने या उन्हें अक्षम / सक्षम करने की अनुमति है। ये सभी बटन / लिंक / कार्रवाइयां दृश्य पृष्ठ पर हैं ...

[आदर्श रूप से मैं अक्षम बटनों को अदृश्य बना देता हूं, लेकिन यह यहां महत्वपूर्ण नहीं है]

संपादित करें: अभी तक कुछ अच्छे सुझाव हैं, लेकिन अभी तक पूरा समाधान नहीं है - अभी भी डेटाबेस-संचालित समाधान की ओर झुकाव ...

  • सुरक्षा अनुमति मांग गुण अपवाद फेंक देंगे जब बटन क्लिक किए जाते हैं, जो किसी अनुकूल काम नहीं है; मैं उन बटन को छिपाना चाहता हूं जो उपयोगकर्ता को उपयोग करने की अनुमति नहीं है
  • लॉगिनव्यू नियंत्रण भी दिलचस्प है, लेकिन अधिकांश पृष्ठ सामग्री को कई बार (हर भूमिका के लिए एक बार) की नकल करने की आवश्यकता होगी और वह मामले को नहीं संभाल सकता है जहां कोई उपयोगकर्ता एक से अधिक भूमिका में है - मैं यह नहीं मान सकता कि भूमिकाएं पदानुक्रमित हैं क्योंकि वे ग्राहक द्वारा परिभाषित किया जाएगा

संपादित करें: मंच Win2K / XP, SQL सर्वर 2005, एएसपी.नेट 2.0, AJAX का उपयोग नहीं कर रहा है


मुझे लगता है कि आपको यहां करने की क्या ज़रूरत है, या तो आपके व्यावसायिक ऑब्जेक्ट या आपके नियंत्रक में अनुमति क्वेरी विधि का एक सेट लागू है उदाहरण: CanRead (), CanEdit (), CanDelete ()

जब पृष्ठ रेंडर करता है, तो उसे व्यापारिक वस्तु की क्वेरी करने और उपयोगकर्ताओं को अधिकृत क्षमताओं का निर्धारण करने और इस जानकारी के आधार पर कार्यक्षमता को सक्षम या अक्षम करने की आवश्यकता होती है। व्यापारिक ऑब्जेक्ट सक्रिय उपयोगकर्ता की अनुमतियों को निर्धारित करने के लिए, भूमिकाओं या अतिरिक्त डेटाबेस क्वेरीज़ का उपयोग कर सकते हैं।

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

रॉकी Lhotka की पुस्तक में इस मॉडल का उपयोग करने वाला कुछ कोड है नया संस्करण अभी तक गूगल में नहीं है


मैं विशिष्ट उपयोगकर्ताओं के बजाय विज्ञापन समूहों के लिए पहुंच के अधिकारों को देना पसंद करता हूं। मुझे लगता है कि यह बहुत अधिक लचीला है

मुझे आपके आवेदन के बारे में अधिक जानकारी नहीं है, लेकिन आप web.config फ़ाइल में प्राधिकरण टैग को देखना चाहते हैं:

<authorization>
    <!--  
        <deny users="?" />
        <allow     users="[comma separated list of users]"
                   roles="[comma separated list of roles]"/>
        <deny      users="[comma separated list of users]"
                   roles="[comma separated list of roles]"/>
    -->
</authorization>

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


हालांकि मैंने पहले कभी इसका इस्तेमाल नहीं किया है और इसकी योग्यताओं का तर्क नहीं किया है, मुझे पता है कि .NET की भूमिका आधारित कोड सुरक्षा है जो आपको भूमिका या उपयोगकर्ता द्वारा विधियों को नीचे की तरफ लॉक करने की अनुमति देती है। उदाहरण के लिए:

[PrincipalPermissionAttribute(SecurityAction.Demand, Name = "MyUser", Role = "User")]
public static void PrivateInfo()
{   
    //Print secret data.
    Console.WriteLine("\n\nYou have access to the private data!");
}

भूमिका आधारित सुरक्षा यहाँ अधिक विस्तार से कवर की गई है । मुझे नहीं पता है कि यह आपकी मदद करेगा हालांकि यह विचार करने के लिए इसे बदलने के लिए पुनः कंपाइल की आवश्यकता होगी; हालांकि तरीकों पर थप्पड़ लेबल्स कोड में सुरक्षा दिखाने के लिए तर्क दिखाए / छुपाने के लिए तर्कसंगत बनाने की तुलना में तेज़ है या

इसके अतिरिक्त, आप सक्रिय निर्देशिका की संभावना हासिल करने के लिए एकीकृत विंडोज प्रमाणीकरण पर पढ़ना चाहते हैं





roles