c# - How can I restrict users to only edit their data with Linq To SQL? -


बैकग्राउंड: मैं एएसपी में छोटे-छोटे प्रूफ ऑफ अवधारणा वेब एप्लीकेशन पर काम कर रहा हूं सी # के साथ .NET 4.0 और मैं Linq to SQL का उपयोग कर रहा हूं क्योंकि यह त्वरित और आसान है। मुझे अब एक उपयोगकर्ता को एक ही डेटाबेस में दूसरे उपयोगकर्ता के डेटा देखने से रोकना होगा। इसलिए मैंने अपनी अधिकांश सारणी में 'खाता' कॉलम जोड़ लिया है और मैं यह देखना चाहता हूं कि वर्तमान उपयोगकर्ता एक ही खाते का सदस्य है, जो उन डेटा को देखने / संपादित करने से पहले उन्हें एक्सेस करने की अनुमति देता है।

एक संभव उपाय मैं वास्तव में खुश नहीं हूँ: मैं आसानी से अपने सभी लिंक के माध्यम से SQL क्वेरी में जा सकता हूं और अगर इस तरह से जांच करने के लिए एक I बयान जोड़ता है: < पूर्व> मायडाटाकॉन्टेक्स डीबी = नया मायडाटाकॉन्टेस्ट (); // वर्तमान उपयोगकर्ता की सूचना डीबी USER myUser = DB.USERs.Where (j = & gt; j.USR_EMAIL == User.Identity.Name) से प्राप्त करें। FirstOrDefault (); // ऑब्जेक्ट myObject = DB.MYOBJECTs संपादित करने के लिए। जहां (जे = & gt; जे.आई.डी == IdFromQueryString) .FirstOrDefault (); // उस ऑब्जेक्ट के खाते से उपयोगकर्ता के खाते की तुलना करें, वे अब देखने की कोशिश कर रहे हैं कि क्या (myUser.AccountID == myObject.AccountID) {// वस्तु प्रदर्शित करें} अन्य {// प्रदर्शन त्रुटि संदेश}

गलतियों के लिए पुनरावृत्ति और अवसर का उल्लेख नहीं करने के लिए पूरे आवेदन में यह बहुत काम होगा। यह भी बनाए रखने के लिए दर्दनाक होगा और यदि मैं इसे एक क्वेरी के लिए जोड़ना भूल सकता हूँ तो मैं एक सुरक्षा छेद खोलूंगा।

प्रश्न: क्या यह एक बार करने का एक तरीका है प्रत्येक तालिका के लिए और यह स्वचालित रूप से प्रत्येक समय मैं Linq to SQL के साथ एक क्वेरी करने की जांच करता है? या इस बारे में जाने का एक बेहतर तरीका है?

आपको पैटर्न का इस्तेमाल करना चाहिए और सीधे उपयोग नहीं करना चाहिए था Contest.Users , लेकिन हमेशा रिपॉजिटरी.उपर्स का उपयोग करें। इसके बाद आप आंतरिक कोडबॉक्स में यू से उपयोगकर्ता को के रूप में उजागर करने के लिए रिपॉजिटरी को बदल सकते थे। यूज़र, जहां यू.एकाउंटआईडी = वर्तमानएकाउंटआईडी का चयन करें इस प्रकार दायित्व को लागू किया जाता है संयोग से यह तकनीक है ...

अगली सबसे अच्छी बात यह है कि आप अपनी संस्थाओं के साथ लैम्ब्डा फ़िल्टर को जोड़ सकते हैं, देखें। आप इसे बनाने के हर संदर्भ में जोड़ना होगा। फिर से, एक विधि (या बेहतर, एक रिपॉज़िटरी पैटर्न को कार्यान्वित करें ...) से डेटा संदर्भ प्राप्त करने के लिए कोड को पुन: करने के लिए बहुत मदद मिलेगी।

अंत में आप बैक एंड पर जा सकते हैं और इसे अपडेट करने योग्य विचार और मैं दृढ़ता से इसे हतोत्साहित करूँगा।

पी एस मुझे आशा है कि आपने टेबल पर प्रत्येक क्लस्टर किए गए इंडेक्स में account_id बना दिया, और इकाई id प्राथमिक कुंजी गैर-क्लस्टर्ड बना दिया, क्या आपने किया? आपका प्रदर्शन अन्यथा टैंक होगा।

Comments