2010-01-18 8 views
9

मैं वर्तमान में एक .NET पर्यावरण (एन-स्तरित) में एंटरप्राइज़ एप्लिकेशन के साथ काम कर रहा हूं और मैं प्रमाणीकरण/प्रमाणीकरण + डेटा प्रबंधित करने का सबसे अच्छा तरीका जानना चाहता हूं मेरे BussinessLayer (बीएल) में फ़िल्टरिंग। हम उस बीएल का उपयोग कई इंटरफेस (एएसपी.नेट अनुप्रयोगों और वेब सर्विसेज) से करेंगे और मुझे लगता है कि मेरे सर्विसलेयर को नौकरी करना चाहिए लेकिन मुझे सबसे अच्छा तरीका नहीं मिल रहा है।एक सेवा परत में प्राधिकरण और उपयोगकर्ता की जानकारी (.NET अनुप्रयोग)

मुझे लगता है कि यह ऐसा कुछ हो सकता है: (1) उपयोगकर्ता प्रमाणीकृत (एएसपी.नेट वेब क्लाइंट) प्राप्त करता है, शायद फॉर्म प्रमाणीकरण का उपयोग कर। (2) एएसपी .NET कोड (नियंत्रक/कोडबहाइंड) किसी उपयोगकर्ता को कुछ उपयोगकर्ता केस करने के लिए सेवा प्रदान करता है, किसी भी तरह से 'उपयोगकर्ता' से गुजरता है। (3) सेवा विधि जांचती है कि 'उपयोगकर्ता' मौजूद है (प्रमाणीकरण) और उसकी भूमिकाएं (प्राधिकरण) यह सत्यापित करने के लिए कि वह उस विधि को कॉल कर सकता है। यदि प्रमाणित नहीं है या अधिकृत अपवाद फेंक दिया गया है। (4) सेवा रिपॉजिटरीज + अन्य सेवाओं का उपयोग करती है + जो भी काम पूरा करने की आवश्यकता है। अगर किसी प्रकार का जुर्माना फ़िल्टरिंग आवश्यक है (उदाहरण के लिए उपयोगकर्ता को केवल कुछ परियोजनाओं पर अनुमति है) सेवा स्वचालित रूप से लागू होती है।

मैं क्या चाहता हूं कि 'वेब सामग्री' से अलग सेवा सेवा प्राप्त करने के लिए (सत्र को accesing नहीं ...) लेकिन कौन जानता है कि उपयोगकर्ता सही तरीके से कार्य करने के लिए अपने तरीकों को बुला रहा है। मुझे यह भी नहीं पता कि एएसपी .NET प्रमाणीकरण के साथ उस काम को कैसे अच्छी तरह से मेल किया जाए ... मैं सेवा ctor में 'उपयोगकर्ता' को सुदृढ़ करने में सोच रहा हूं, ताकि इसकी विधियों में 'संदर्भ' की आवश्यकता हो, क्या वह काम कर सकता है? ... मैं उस पर कुछ संकेतों या मौजूदा कोड स्निपेट की सराहना करता हूं।

आपकी मदद के लिए धन्यवाद ...

उत्तर

10

सबसे पहले, प्रमाणीकरण और प्रमाणीकरण दो अलग-अलग चीजें हैं। आपके प्रश्न का तात्पर्य है कि आप इसे पहले ही जानते हैं, लेकिन मैं बस इसके बारे में स्पष्ट होना चाहता था।

प्रमाणीकरण आवेदन सीमा पर होना चाहिए (उदा। वेब अनुप्रयोग में फॉर्म प्रमाणीकरण)।

डिफ़ॉल्ट दृष्टिकोण यह है कि प्रमाणीकरण मॉड्यूल सफल प्रमाणीकरण पर Thread.CurrentPrincipal सेट करता है।

सामान्य रूप से, IPrincipal .NET में उपयोगकर्ता संदर्भ मॉडलिंग के लिए मानक आधार है। उदाहरण के लिए, HttpContext.User एक आईप्रिनिपलर है।

अपने डोमेन मॉडल और डेटा एक्सेस मॉड्यूल में, आप प्राधिकरण तर्क लागू करने के लिए Thread.CurrentPrincipal का उपयोग कर सकते हैं। यह आपको एक दूसरे के स्वतंत्र रूप से प्रमाणीकरण और प्रमाणीकरण को बदलने की अनुमति देता है।

+0

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

+0

@ VicorVelarde मुझे आशा है कि अब तक आपका जवाब होगा :) यह संभव है कि आप परिणाम पोस्ट करें? – Jowen

2

मेरे लिए, मुझे लगता है कि यह दोनों सरल, और अधिक विस्तृत करता है, तो आप ग्राहक परतों (अपनी वेबसाइट/सेवाओं) जाने प्रमाणीकरण करते हैं और बीएल छोड़ शामिल करने के लिए है बस व्यापार तर्क।

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

+0

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

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