2010-11-19 14 views
9

मेरे पास एक क्लास लाइब्रेरी है जिसमें मेरी डेटा बेस एक्सेस लेयर है, और मैं इसे अपनी सभी परियोजनाओं में उपयोग करता हूं जो इस डीबी के साथ काम करता है, अब मैं इस पुस्तकालय में सुरक्षा को एकीकृत करना चाहता हूं ताकि मैं अलग-अलग डेटा वापस कर सकूं विभिन्न सुरक्षा भूमिकाओं के लिए। .NET बिल्ड-इन सुरक्षा के साथ इसे प्राप्त करने का सबसे अच्छा तरीका क्या है? मैं System.Security.Permissions.PrincipalPermission उपयोग करने के बारे में सोच रहा था, लेकिन मैं नहीं देख सकते हैं कि यह मेरी मदद कर सकते हैं, क्योंकि मेरी लाइब्रेरी का उपयोग कर किसी को भी इससी # भूमिका-आधारित सुरक्षा

GenericIdentity genericIdentity = new GenericIdentity("User"); 
GenericPrincipal genericPrincipal = new GenericPrincipal(genericIdentity, new[] { "Administrator" }); 
Thread.CurrentPrincipal = genericPrincipal; 

तरह क्लाइंट अनुप्रयोग लिख सकते हैं और वे पारित करेंगे सब मेरी मुख्य अनुमति मांग

PrincipalPermission principalPermission = new PrincipalPermission(null, "Administrator"); 
principalPermission.Demand(); 

प्रमाणीकरण के बिना भी। या तो मैं इस सुरक्षा मॉडल को नहीं समझता, या यह कुछ भी सुरक्षित नहीं करता है।

+0

2 साल बाद अपना खुद का प्रश्न पढ़ना, क्या बेवकूफ सवाल -) –

उत्तर

5

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

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

+0

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

+0

@ ब्रोकनपाइप - तो शायद आप अलग से जोर दे सकते हैं कि अनुमति एक ठोस ठोस कार्यान्वयन का होना चाहिए? ('is' के साथ)? (केवल आपका कोड जारी कर सकता है) –

+0

क्या आप एक सुरक्षा स्टोर जैसे सक्रिय निर्देशिका ... या दोनों एडी और एसक्यूएल सर्वर के खिलाफ सभी को मान्य कर रहे हैं? –

0
public class Example 
{ 

    // Will enforce that the user have the administrator role 
    [PrincipalPermission(XXXX, Role="Administrator")] 
    public void Remove(int userId) 
    { 
    } 

    public void Add(int userId) 
    { 
    if (!Thread.CurrentPrincipal.IsInRole("User")) 
     throw new UnauthorizedAccessException("Only registered users may add users"); 
    } 

} 

वास्तविक प्रिंसिपल/पहचान कॉन्फ़िगरेशन सेटअप आपकी लाइब्रेरी के उपयोगकर्ता पर कैसे है।

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