ट्रैक
/
C#
C#
/
अभ्यास
/
ऑथेंटिकेशन सिस्टम
ऑथेंटिकेशन सिस्टम

ऑथेंटिकेशन सिस्टम

सीखने का अभ्यास

परिचय

कॉन्स्टेंट

const मॉडिफायर को ऐसे किसी भी फील्ड पर लगाया जा सकता है (और सामान्यतः लगाना चाहिए) जिसकी वैल्यू कंपाइल समय पर ही पता होती है और प्रोग्राम के जीवनकाल में नहीं बदलती।

private const int num = 1729;
public const string title = "Grand" + " Master";

readonly मॉडिफायर को ऐसे किसी भी फील्ड पर लगाया जा सकता है (और सामान्यतः लगाना चाहिए) जिसे const नहीं बनाया जा सकता और जिसकी वैल्यू प्रोग्राम के जीवनकाल में नहीं बदलती। ऐसी वैल्यू या तो इनलाइन इनिशलाइज़र से सेट होती है, या इंस्टैंशिएशन के समय (कंस्ट्रक्टर से, या कंस्ट्रक्टर द्वारा कॉल किए गए किसी मेथड से)।

private readonly int num;
private readonly System.Random rand = new System.Random();

public MyClass(int num)
{
    this.num = num;
}

डिफेंसिव कॉपीइंग

सुरक्षा की दृष्टि से संवेदनशील स्थितियों में, या सिर्फ किसी बड़े कोडबेस पर भी जहाँ डेवलपरों की प्राथमिकताएँ और लक्ष्य अलग-अलग होते हैं, आपको कोशिश करनी चाहिए कि किसी क्लास के पब्लिक API का रास्ता बाहर से न काटा जा सके। ऐसा दो तरीकों से हो सकता है: किसी मेथड के म्यूटेबल पैरामीटर लेकर उन्हें संग्रहीत कर लेना, या किसी क्लास के म्यूटेबल मेंबर को रिटर्न वैल्यू के द्वारा या out पैरामीटर के रूप में बाहर निकाल देना।

रीडओनली कलेक्शन

readonly मॉडिफायर किसी फील्ड की वैल्यू या रेफरेंस को दोबारा लिखे जाने से रोक तो देता है, लेकिन रेफरेंस टाइप के मेंबरों की कोई सुरक्षा नहीं देता।

readonly List<int> ints = new List<int>();

void Foo()
{
    ints.Add(1);    // ok
    ints = new List<int>(); // fails to compile
}

रेफरेंस टाइप के सभी मेंबरों को सुरक्षित रखने के लिए फील्डों को readonly बनाया जा सकता है और ऑटोमैटिक प्रॉपर्टी को set एक्सेसर के बिना बनाया जा सकता है।

बेस क्लास लाइब्रेरी (BCL) कलेक्शन के कुछ रीडओनली रूप देती है, जहाँ कलेक्शन के मेंबरों को अपडेट होने से रोकना ज़रूरी होता है। ये रैपर के रूप में आते हैं:

  • ReadOnlyDictionary<T> किसी Dictionary<T> को रीडओनली रूप में उपलब्ध कराता है।
  • ReadOnlyCollection<T> किसी List<T> को रीडओनली रूप में उपलब्ध कराता है।

निर्देश

आपने पिछली बार developer-privileges में जिस ऑथेंटिकेशन सिस्टम को देखा था, उस पर अब कुछ ध्यान देने की ज़रूरत है। आपको इस कोड को साफ-सुथरा करना है। ऐसा सफाई का काम आने वाले मेंटेनरों का काम तो आसान बनाएगा ही, साथ ही कुछ सुरक्षा कमजोरियों को भी सामने लाएगा और उन्हें ठीक करेगा।

1. उपयुक्त फील्ड और प्रॉपर्टी को const बनाइए

यह एक रिफैक्टरिंग का काम है। Authenticator या Identity के जिन भी मेंबरों को आप उपयुक्त समझें, उनमें const मॉडिफायर जोड़िए।

2. उपयुक्त फील्ड को readonly बनाइए

यह एक रिफैक्टरिंग का काम है। Authenticator क्लास या Identity स्ट्रक्चर के जिन भी फील्ड को आप उपयुक्त समझें, उनमें readonly मॉडिफायर जोड़िए।

3. यह सुनिश्चित कीजिए कि बनने के बाद क्लास बदली न जा सके

Authenticator क्लास या Identity स्ट्रक्चर की जो भी प्रॉपर्टी उपयुक्त लगे, उसका set एक्सेसर हटाइए या उसे private बनाइए।

4. यह सुनिश्चित कीजिए कि एडमिन के साथ छेड़छाड़ न की जा सके

अभी Admin को कॉल करने पर एडमिन आइडेंटिटी फील्ड मिलता है। यह ठीक नहीं है, क्योंकि कॉल करने वाला इस फील्ड को बदल सकता है। कोई ऐसा तरीका खोजिए जिससे कॉल करने वाला Authenticator ऑब्जेक्ट पर एडमिन का विवरण न बदल सके।

5. यह सुनिश्चित कीजिए कि डेवलपरों के साथ छेड़छाड़ न की जा सके

अभी हार्ड कोड किए गए विशेषाधिकार प्राप्त डेवलपर आइडेंटिटी वाली डिक्शनरी GetDevelopers() को कॉल करने पर मिलती है। यह ठीक नहीं है, क्योंकि कॉल करने वाला डिक्शनरी को बदल सकता है। कोई ऐसा तरीका खोजिए जिससे कॉल करने वाला Authenticator ऑब्जेक्ट पर डेवलपरों का विवरण न बदल सके।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
C# Exercism

ऑथेंटिकेशन सिस्टम शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।