ট্র্যাক
/
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 অ্যাকসেসর ছাড়াই অটোমেটিক প্রপার্টি ডিফাইন করা যায়।

Base Class Library (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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।