কয়েকদিন আগে, আমার কিছু সহকর্মী মাকাউট বাডি নামক একটি ওপেন সোর্স অ্যাপ্লিকেশনের একটি সমস্যা সম্পর্কে আমার সাথে যোগাযোগ করেছিল যেটি আমাদের বিশ্ববিদ্যালয়ের জন্য ডিজাইন করা একটি নোট-শেয়ারিং প্ল্যাটফর্ম, যার লক্ষ্য শিক্ষার্থীদের শীর্ষ নোট, অতীতের পরীক্ষার প্রশ্ন এবং ইউটিউব টিউটোরিয়ালগুলি দক্ষতার সাথে শেয়ার করতে সহায়তা করা। .
যখন তারা সফলভাবে সম্পদ আপলোড করার জন্য একটি সিস্টেম তৈরি করেছিল, তারা নিশ্চিত করার জন্য একটি চ্যালেঞ্জের সম্মুখীন হয়েছিল যে শুধুমাত্র অনুমোদিত ব্যক্তিরা সামগ্রী আপলোড করতে পারে।
নীচের ডেমোতে যেমন দেখানো হয়েছে, যে কোনো ব্যবহারকারী সাইন আপ করার পরে একটি সংস্থান তৈরি করতে পারে। এটি একটি বড় সমস্যা তৈরি করেছে কারণ আমরা ব্যবহারকারীরা কী আপলোড করে তা নিয়ন্ত্রণ করতে পারিনি, কেউ কেউ ক্ষতিকারক বা বিরক্তিকর সামগ্রীও আপলোড করতে পারে৷
প্রাথমিকভাবে, তারা একটি প্রশাসক ভূমিকা সংজ্ঞায়িত করেছিল এবং ব্যক্তিদের একটি নির্বাচিত গোষ্ঠীকে প্রশাসনিক সুবিধা প্রদান করেছিল। যাইহোক, ভূমিকার সংখ্যা বাড়ার সাথে সাথে কোডটি ক্রমশ জটিল এবং পরিচালনা করা কঠিন হয়ে পড়ে।
RBAC বাস্তবায়নের পাশাপাশি, আমরা একটি অনুরোধ অ্যাক্সেস অনুমোদন ব্যবস্থাও চালু করেছি। এই সিস্টেম নিশ্চিত করে যে কোন ব্যবহারকারী যে কন্টেন্ট আপলোড করতে চায় তাকে প্রথমে অ্যাক্সেসের অনুরোধ করতে হবে, যা একজন প্রশাসক তারপর অনুমোদন বা অস্বীকার করতে পারেন। নিরাপত্তার এই যোগ করা স্তরটি আমাদের Makaut Buddy-এর বিষয়বস্তুর অখণ্ডতা বজায় রাখতে সাহায্য করে।
এই নিবন্ধে, আমি প্রোগ্রামিং ভাষা হিসাবে JavaScript এবং ফ্রেমওয়ার্ক হিসাবে Next.js ব্যবহার করেছি। যাইহোক, এখানে আলোচনা করা ধারণাগুলি ভাষা-নির্দিষ্ট নয় এবং আপনি সেগুলি আপনার পছন্দের প্রোগ্রামিং ভাষায় প্রয়োগ করতে পারেন।
এই নিবন্ধের শেষে, আপনি আপনার অ্যাপ্লিকেশনে একটি মৌলিক RBAC মডেল প্রয়োগ করতে জানতে পারবেন।
সঙ্গে যে বলেন, এর মধ্যে ডুব!
স্কুলে ছুটে যাওয়া সেই সকালগুলোর কথা মনে আছে? আপনার আইডি পরীক্ষা করা নিরাপত্তা প্রহরী প্রমাণীকরণের একটি নিখুঁত উদাহরণ। তারা ক্যাম্পাসে অনুমোদিত একজন ছাত্র হিসাবে আপনার পরিচয় যাচাই করছে। কিন্তু যে শুধু প্রথম ধাপ. এমনকি শনাক্ত হওয়ার পরেও, আপনি কেবল কোনও ক্লাসরুমে হাঁটবেন না, তাই না? সেখানেই অনুমোদন আসে।
আপনার অনুমোদন হিসাবে আপনার ক্লাস সময়সূচী চিন্তা করুন. এটি আপনাকে আপনার ভূমিকার উপর ভিত্তি করে নির্দিষ্ট এলাকায় (শ্রেণীকক্ষ) অ্যাক্সেস প্রদান করে (যে শ্রেণীতে নথিভুক্ত ছাত্র)। আপনি শিক্ষকের লাউঞ্জে বা লাইব্রেরির সীমাবদ্ধ বিভাগে প্রবেশ করার জন্য অনুমোদিত হবেন না – যদিও আপনি একজন ছাত্র (প্রমাণিত)।
প্রমাণীকরণ এবং অনুমোদনের মধ্যে পার্থক্য হল "আপনি কে?" বনাম "আপনি কি করতে পারবেন?"
অনুমোদন প্রতিটি প্রতিষ্ঠানে গুরুত্বপূর্ণ কারণ এটি ব্যক্তিদের এমন কাজগুলি করতে বাধা দেয় যা তারা করার জন্য অনুমোদিত নয়। এটি প্রতিষ্ঠানের নিরাপত্তা নিশ্চিত করে এবং ক্ষতি প্রতিরোধে সহায়তা করে।
আসুন একটি উদাহরণ দিয়ে উপরের বক্তব্যটি ব্যাখ্যা করি:
একটি কোম্পানিতে, গভীর অভিজ্ঞতার সাথে কিছু সিনিয়র ইঞ্জিনিয়ার এবং কিছু ইন্টার্ন এখনও দড়ি শিখছেন। সিনিয়র ইঞ্জিনিয়ার এবং ইন্টার্ন উভয়ের একই স্তরের অনুমতি থাকলে এটি যে বিপর্যয় ঘটাবে তা আপনি কল্পনা করতে পারেন। যে ইন্টার্নরা এখনও শিখছে তারা অজান্তে কিছু ভুল করতে পারে যার জন্য কোম্পানিকে অর্থ প্রদান করতে হবে। এই ধরনের পরিস্থিতিতে, ভূমিকা ভিত্তিক অ্যাক্সেস কন্ট্রোল মডেলটি সর্বোত্তম কাজ করে কারণ অনুমতিগুলি ব্যক্তিদের জন্য বরাদ্দ করা হয় না পরিবর্তে অনুমতিগুলি ভূমিকাগুলিতে বরাদ্দ করা হয়৷ উদাহরণ স্বরূপ, শুধুমাত্র একজন সিনিয়র ইঞ্জিনিয়ার বা টেক লিড রিসোর্স মুছে দিতে পারে যেখানে সমস্ত ইন্টার্ন শুধুমাত্র রিসোর্স দেখতে এবং পরিচালনা করতে পারে।
এর পরে, আসুন দেখি কিভাবে আমরা একটি অ্যাপ্লিকেশনে RBAC প্রয়োগ করতে পারি।
প্রথমত, আমাদের ভূমিকা নির্ধারণ করতে হবে এবং প্রতিটি ভূমিকার জন্য অনুমতি দিতে হবে।
দ্রষ্টব্য: একটি ভূমিকা হল একটি প্রতিষ্ঠানে যে অবস্থান বা উদ্দেশ্য, আমাদের ভূমিকা প্রয়োজন যাতে আমরা সেই ভূমিকার জন্য নির্ধারিত অনুমতি বা বিশেষাধিকারের ভিত্তিতে ব্যক্তিদের মধ্যে পার্থক্য করতে পারি।
অ্যাপ্লিকেশনের প্রতিটি ব্যবহারকারীকে একটি ভূমিকা নির্ধারণ করার জন্য আমাদের একটি উপায় প্রয়োজন। এটি সাধারণত ব্যবহারকারী সাইন আপ করার পরে করা হয়।
আমাদের ব্যাকএন্ডে একটি এপিআই দরকার যা একজন ব্যবহারকারী যে কাজটি করতে চায় সেটি গ্রহণ করে এবং ব্যবহারকারীর অনুমোদন পরীক্ষা করে। নীচের চিত্রটি আপনাকে আরও ভাল বোঝা দেবে:
যাইহোক, আমরা স্ক্র্যাচ থেকে সম্পূর্ণ মডেল বাস্তবায়ন করতে যাচ্ছি না। পরিবর্তে, আমরা পারমিট নামে একটি তৃতীয় পক্ষের অনুমোদনের টুল ব্যবহার করতে যাচ্ছি যা আমাদের জন্য অনুমোদন প্রতিষ্ঠার পুরো প্রক্রিয়াটিকে খুব মসৃণ এবং দক্ষ করে তুলবে, যাতে আপনি সত্যিই গুরুত্বপূর্ণ বৈশিষ্ট্যগুলিতে কাজ করতে পারেন৷
নীচের চিত্রটি আপনাকে দেখায় কিভাবে আমরা আমাদের অ্যাপ্লিকেশনগুলিতে RBAC বাস্তবায়নের জন্য পারমিটের সুবিধা নিতে যাচ্ছি:
এই বিভাগে, আমরা পারমিট ব্যবহার করে ভূমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল (RBAC) বাস্তবায়নের পদক্ষেপগুলির মাধ্যমে হাঁটব।
যেহেতু আমরা একটি RBAC মডেল প্রতিষ্ঠার জন্য একটি পারমিট ব্যবহার করছি, প্রথমে আমাদের একটি পারমিট অ্যাকাউন্ট এবং একটি ওয়ার্কস্পেস তৈরি করতে হবে:
এখন আমাদের একটি সংস্থান তৈরি করতে হবে যা আমরা আমাদের অ্যাপ্লিকেশনে অ্যাক্সেস নিয়ন্ত্রণ করতে চাই।
উদাহরণস্বরূপ, একটি নোট গ্রহণের অ্যাপ্লিকেশনে, সংস্থানটি হবে নোট, এবং ক্রিয়াগুলি তৈরি করা , পড়া, আপডেট করা এবং মুছে ফেলা হতে পারে।
একটি সম্পদ তৈরি করতে:
উপরের উদাহরণে, সম্পদের নাম হল নোট এবং ব্যবহারকারীকে যে কাজগুলি সম্পাদন করার অনুমতি দেওয়া হয় তা হল তৈরি করুন, পড়ুন, আপডেট করুন এবং মুছুন৷
রিসোর্স তৈরি করার পরে, আমাদের অ্যাপ্লিকেশনে বিদ্যমান ভূমিকাগুলিকে সংজ্ঞায়িত করতে হবে।
এই ক্ষেত্রে, যেহেতু অ্যাপ্লিকেশনটি একটি বিশ্ববিদ্যালয়ের জন্য একটি নোট-শেয়ারিং অ্যাপ্লিকেশন, ভূমিকাগুলি হতে চলেছে:
আমরা উভয় ভূমিকা তৈরি করার পরে, এখন আমাদের নীতি সম্পাদকের কাছ থেকে প্রতিটি ভূমিকা সম্পাদন করতে পারে এমন ক্রিয়াগুলি নির্ধারণ করতে হবে, যেমনটি নীচে দেখানো হয়েছে:
এখন আপনার পারমিট অ্যাকাউন্ট কনফিগার করা হয়েছে, আপনি পারমিটের সাথে যোগাযোগ করতে ব্যাকএন্ড API তৈরি করা শুরু করতে পারেন। আমরা পারমিট দ্বারা প্রদত্ত Node.js SDK ব্যবহার করব৷ আপনি পারমিট ডকুমেন্টেশনে আপনার পছন্দের প্রোগ্রামিং ভাষার জন্য SDK খুঁজে পেতে পারেন।
ব্যবহারকারীদের সিঙ্ক করুন এবং ডিফল্ট ভূমিকা বরাদ্দ করুন
প্রথমত, আমাদের নিশ্চিত করতে হবে যে আমাদের অ্যাপ্লিকেশনে সাইন আপ করা প্রতিটি ব্যবহারকারীকে পারমিট ডিরেক্টরিতে সিঙ্ক করা হয়েছে এবং স্টুডেন্টের একটি ডিফল্ট ভূমিকা নির্ধারণ করা হয়েছে।
এটি করার জন্য আমাদের নীচে দেখানো হিসাবে একটি ব্যাকএন্ড API তৈরি করতে হবে:
এই API 2টি জিনিস করে:
createUser
API ব্যবহার করে একটি নতুন ব্যবহারকারী তৈরি করে।assignRole
API ব্যবহার করে একটি ডিফল্ট ভূমিকা বরাদ্দ করে।
পারমিট ডক্সে পারমিট প্রদান করে এমন সমস্ত API সম্পর্কে আপনি আরও পড়তে পারেন
ব্যবহারকারীর ভূমিকা পান
এর পরে, আমাদের একটি ব্যাকএন্ড API তৈরি করতে হবে যা Permit.io থেকে ব্যবহারকারীর ভূমিকা পায় এবং এটিকে ফ্রন্টএন্ডে ফেরত পাঠায়।
নিচে দেখানো APIটি permit.api.users.get(user_key)
ব্যবহার করে ব্যবহারকারী পায়
এই APIটি ব্যবহারকারীর ভূমিকা পায় যার সাহায্যে আমরা আমাদের ফ্রন্ট-এন্ড উপাদানগুলিকে ম্যানিপুলেট করতে পারি যাতে শুধুমাত্র বিশেষ ভূমিকা থাকা ব্যক্তিরা এটি দেখতে সক্ষম হয়।
আপনি permit.check() ফাংশনটি পরীক্ষা করে দেখতে পারেন যে একটি নির্দিষ্ট ভূমিকা সহ ব্যবহারকারীকে একটি অপারেশন করার অনুমতি দেওয়া হয়েছে কিনা।
এর সাথে, আমরা পারমিট ব্যবহার করে সফলভাবে একটি RBAC মডেল বাস্তবায়ন করেছি। এখন, সেটআপ সম্পূর্ণ করতে আমরা আপনার পছন্দের ফ্রন্টএন্ড ফ্রেমওয়ার্ক বা লাইব্রেরির সাথে ব্যাকএন্ড রুটগুলিকে একীভূত করতে পারি।
আমাদের সেটআপ সম্পূর্ণ করতে, আমাদের একটি উপাদান প্রয়োজন যা ব্যবহারকারীদের ভূমিকা আপগ্রেডের অনুরোধ করতে দেয়:
পারমিট এলিমেন্ট হল "পারমিট শেয়ার-ইফ" এর একটি অংশ যা প্রি-বিল্ট, এম্বেডযোগ্য UI উপাদানগুলির একটি স্যুট যা অ্যাপ্লিকেশনগুলিতে অ্যাক্সেস শেয়ারিংকে একটি হাওয়ায় পরিণত করে। সম্পূর্ণরূপে কার্যকরী অ্যাক্সেস নিয়ন্ত্রণ প্রদানের জন্য ডিজাইন করা হয়েছে, তারা আপনার ব্যবহারকারীদের কাছে অর্পণ করার অনুমতি ব্যবস্থাপনাকে সহজ এবং নিরাপদ করে তোলে।
এটা আমরা উপাদান তৈরি করেছি.
উপাদানগুলি ব্যবহার করার আগে, ব্যবহারকারীকে অনুমতি উপাদানে লগ ইন করার জন্য আমাদের একটি ব্যাকএন্ড API তৈরি করতে হবে,
দ্রষ্টব্য: যত তাড়াতাড়ি সম্ভব ব্যবহারকারীর লগ ইন করা গুরুত্বপূর্ণ, বিশেষত সাইন আপ করার পরে।
এখন, কোডটি দেখি:
এপিআই কোড এন্ডপয়েন্টে পরিবেশন করছে /api/v1/login_permit/?userkey=user_key
:
লগইন বাস্তবায়নের জন্য ফ্রন্টএন্ড কোডটি এইরকম দেখাবে:
এটা আমরা আমাদের কোড সেট আপ করেছি.
এখন, আমাদের শুধু পারমিট ড্যাশবোর্ডে যেতে হবে এবং ইউজার ম্যানেজমেন্ট আইফ্রেম এবং অ্যাক্সেস-রিকোয়েস্ট আইফ্রেম উভয়ই কপি করতে হবে, যেমনটি নীচে দেখানো হয়েছে:
এখন একবার আমরা কোড পেয়ে গেলে, আমাদের ফ্রন্টএন্ডে iframe
যুক্ত করতে হবে যেখানে আমরা আমাদের ব্যবহারকারীদের উপাদানগুলি দেখাতে চাই, আমাদের করতে হবে:
এর সাথে, আমরা সফলভাবে একটি অ্যাক্সেস অনুমোদন সিস্টেম সেট আপ করেছি যেখানে ব্যবহারকারীরা ভূমিকা আপগ্রেডের জন্য অনুরোধ করতে পারে এবং প্রশাসকরা এই অনুরোধগুলি অনুমোদন বা অস্বীকার করতে পারে৷
এই ডেমোটি দেখায় যে কীভাবে "প্রশাসন" ভূমিকা সহ একজন ব্যবহারকারী আপলোড উইজেট অ্যাক্সেস করতে পারে৷
এই ডেমোটি ব্যাখ্যা করে যে কীভাবে "ছাত্র" ভূমিকা সহ একজন ব্যবহারকারী আপলোড উইজেটটি দেখতে পারে না এবং "প্রশাসন" ভূমিকায় আপগ্রেড করার অনুরোধ করতে পারে:
এই ডেমোটি দেখায় যে কীভাবে সুবিধাপ্রাপ্ত ব্যবহারকারীরা ভূমিকা আপগ্রেডের অনুরোধগুলি অনুমোদন করতে পারে:
এই ডেমো দেখায় কিভাবে একজন ব্যবহারকারী "ছাত্র" থেকে "অ্যাডমিন"-এ আপগ্রেড হওয়ার পরে আপলোড উইজেটে অ্যাক্সেস লাভ করে
এটাই!
এই পর্যন্ত পড়ার জন্য আপনাকে ধন্যবাদ।
এই টিউটোরিয়ালে, আমরা অনুমোদনের অন্বেষণ করেছি এবং বুঝতে পেরেছি কেন অনুমোদন যেকোন অ্যাপ্লিকেশনে খুবই গুরুত্বপূর্ণ। আমরা কীভাবে অ্যাপ্লিকেশনটিকে সুরক্ষিত করতে এবং ব্যবহারকারীদের ভূমিকার উপর ভিত্তি করে ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করতে পারমিট সেট আপ এবং কনফিগার করতে পারি তাও আমরা দেখেছি।
এই নিবন্ধটি অনুমোদনের আইসবার্গ এবং RBAC মডেলের টিপ মাত্র। আরও সূক্ষ্ম অনুমোদনের জন্য আপনি ABAC এবং ReBAC-তে দেখতে পারেন।