কম্পিউটার টিউটোরিয়াল

রুবি অন রেলে মাস্টারিং অ্যাকশন পলিসি:সুরক্ষিত অনুমোদনের জন্য একটি ব্যবহারিক গাইড

আপনার অ্যাপকে সুরক্ষিত রাখতে, কে এবং কী অ্যাক্সেস করতে পারে তা আপনাকে নিয়ন্ত্রণ করতে হবে। অ্যাক্সেস নিয়ন্ত্রণকে প্রমাণীকরণে শ্রেণীবদ্ধ করা যেতে পারে — "কাকে" অনুমতি দিতে হবে — এবং অনুমোদন — "কী" তারা অ্যাক্সেস করতে পারবে।

প্রমাণীকরণ অন্য দিনের জন্য একটি বিষয়, কিন্তু যখন এটি ব্যবহারকারীর অনুমোদনের ক্ষেত্রে আসে, তখন আপনার কাছে এটি সম্পর্কে যাওয়ার জন্য সাধারণত দুটি উপায় থাকে:একটি ভূমিকা-ভিত্তিক বা সংস্থান-ভিত্তিক কৌশল ব্যবহার করে৷

এই দুই-অংশের সিরিজে, আমরা একটি রুবি অন রেল ব্লগ অ্যাপ্লিকেশনের জন্য অ্যাকশন পলিসি রত্ন ব্যবহার করার জন্য গভীরভাবে ডুব দেব।

এই অংশে, আমরা অ্যাকশন পলিসির মূল বিষয়গুলি কভার করব৷

চলুন শুরু করা যাক!

পূর্বশর্ত

  • রুবি (আমরা সংস্করণ 3.2.2 ব্যবহার করছি)
  • রেল (সংস্করণ 7.0.7 ব্যবহার করে)
  • রুবি ব্যবহার করার কিছু অভিজ্ঞতা

আসুন প্রথমে সংস্থান-ভিত্তিক অনুমোদন সংজ্ঞায়িত করে এটিতে প্রবেশ করি।

সম্পদ-ভিত্তিক অনুমোদন কি?

যেখানে ভূমিকা-ভিত্তিক অনুমোদন পূর্বনির্ধারিত ব্যবহারকারীর ভূমিকা অনুসারে ব্যবহারকারীর অনুমতি সেট করার উপর ফোকাস করে, সেখানে সংস্থান-ভিত্তিক অনুমোদন একটি অ্যাপ্লিকেশনের মধ্যে প্রকৃত সংস্থানগুলির উপর নিয়ম সেট করে অ্যাক্সেস প্রয়োগ করে। প্রতিটি সংস্থান একটি নীতির সাথে যুক্ত যা স্পষ্টভাবে সংজ্ঞায়িত করে যে একজন ব্যবহারকারী সেই সংস্থানে কী করতে পারে৷

যদিও এই নিবন্ধটি সংস্থান-ভিত্তিক অনুমোদনের উপর দৃষ্টি নিবদ্ধ করা হয়েছে, দুটি অনুমোদনের কৌশলগুলির মধ্যে পার্থক্য জানার অর্থ হল প্রত্যেকে কী করতে পারে তা জানতে আপনি আরও ভালভাবে সজ্জিত৷

কখন ভূমিকা-ভিত্তিক অনুমোদন ব্যবহার করবেন

আপনার এর জন্য ভূমিকা-ভিত্তিক অনুমোদন ব্যবহার করা উচিত:

  • সাধারণ অ্যাপ্লিকেশন - আপনি যদি একটি সরল অনুমতি সিস্টেম এবং কম ব্যবহারকারীর ভূমিকা সহ একটি অ্যাপে কাজ করেন, তাহলে একটি ভূমিকা-ভিত্তিক অনুমোদন কৌশল আপনার জন্য কাজ করতে পারে৷
  • ভালভাবে সংজ্ঞায়িত ব্যবহারকারী গ্রুপ - যদি আপনার অ্যাপে "প্রশাসক", "সম্পাদক", "লেখক" ইত্যাদির মতো সু-সংজ্ঞায়িত ব্যবহারকারী গোষ্ঠী থাকে, তাহলে ভূমিকা-ভিত্তিক অনুমোদন ব্যবহার করুন কারণ এটি ব্যবহারকারীর ভূমিকা স্তরে অ্যাক্সেস নিয়ন্ত্রণ পরিচালনা করে৷

সম্পদ-ভিত্তিক অনুমোদন কখন ব্যবহার করবেন

সম্পদ-ভিত্তিক অনুমোদন এর জন্য দুর্দান্ত:

  • গতিশীল বা জটিল অ্যাক্সেস নিয়ন্ত্রণ - যখন আপনার আবেদনের অনুমোদনের প্রয়োজন ঘন ঘন বিকশিত হয় বা গতিশীল অবস্থার দ্বারা নির্ধারিত হয়, তখন একটি সংস্থান-ভিত্তিক অনুমোদন ব্যবস্থা একটি ভাল পছন্দের জন্য তৈরি করে৷
  • সূক্ষ্ম নিয়ন্ত্রণ - যখন আপনাকে একাধিক শর্তের উপর ভিত্তি করে সংস্থানগুলিতে অ্যাক্সেসের অনুমতি দিতে বা অস্বীকার করতে হবে তার জন্য দরকারী (উদাহরণস্বরূপ, একটি রেল হেল্পডেস্ক অ্যাপ যেখানে ব্যবহারকারীরা গতিশীল বিভাগের তালিকার ভিত্তিতে সমর্থন টিকিট জমা দেয়)। অনুমান করা হচ্ছে যে সহায়তা কর্মীদের বিভাগ দ্বারা টিকিট বরাদ্দ করা হয়েছে, এটি এমন একটি দৃশ্য যেখানে সম্পদ-ভিত্তিক অনুমোদন সত্যিই উজ্জ্বল হবে৷
  • বস্তু-ভিত্তিক নিয়ন্ত্রণ - যেহেতু রিসোর্স-ভিত্তিক অনুমোদন অবজেক্ট লেভেলে ঘটে, আপনি যখন রিসোর্স-ভিত্তিক অনুমোদন কৌশল ব্যবহার করেন তখন জটিল অবজেক্ট-ওরিয়েন্টেড নিয়ম সংজ্ঞায়িত করা সহজ হয়।

তাতে বলা হয়েছে, আপনি ভূমিকা-ভিত্তিক এবং সংস্থান-ভিত্তিক অনুমোদনের মধ্যে বেছে নেবেন কিনা তা আপনার অ্যাপ্লিকেশনের অনন্য বৈশিষ্ট্যের উপর নির্ভর করবে।

চলুন এখন অ্যাকশন পলিসি রত্ন-এর দিকে আমাদের মনোযোগ দেওয়া যাক।

রুবি এবং রেলের জন্য অ্যাকশন পলিসি জেম

অ্যাকশন পলিসি হল রুবি এবং রেল অ্যাপগুলির জন্য একটি নমনীয়, এক্সটেনসিবল এবং পারফরম্যান্স অনুমোদনের কাঠামো৷ এটি বাক্সের বাইরে একাধিক ক্যাশিং কৌশল ব্যবহার করে, এটিকে খুব দ্রুত করে তোলে, বিশেষ করে যদি আপনার অনুমোদনের নিয়মগুলির জন্য ডাটাবেস প্রশ্নগুলির প্রয়োজন হয়৷

আরেকটি বৈশিষ্ট্য যা এই রত্নটিকে সম্পদ-ভিত্তিক নিয়ম তৈরি করার জন্য আদর্শ করে তোলে তা হল এর কাস্টমাইজ করার ক্ষমতা। এটি বেশ কয়েকটি রুবি ক্লাস এবং মডিউল সরবরাহ করে যা বিভিন্ন উপায়ে একত্রিত করা যেতে পারে। আপনি আপনার অ্যাপের যেকোনো জায়গায় রেল কন্ট্রোলারের বাইরে সূক্ষ্ম-দানাযুক্ত অ্যাক্সেস নিয়ন্ত্রণ নিয়ম সেট করতে পারেন।

আরও জানতে অ্যাকশন পলিসি প্রকল্পের হোমপেজটি দেখুন।

এখন চলুন আমরা আজ যে রেল অ্যাপ তৈরি করব তা নিয়ে যাওয়া যাক।

রেল অ্যাপ তৈরি করুন

সামনের দিকে, আমরা একটি Rails 7 ব্লগ অ্যাপ্লিকেশন উল্লেখ করব যেখানে ব্যবহারকারীরা (CRUD) পোস্ট তৈরি করতে, পড়তে, আপডেট করতে এবং মুছে ফেলতে পারে৷

আমরা ধীরে ধীরে Post-এর জন্য একটি কর্ম নীতি নির্ধারণ করব মডেল যা সম্পদ-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রণ অফার করে। এই অ্যাক্সেস কন্ট্রোল কৌশলটি কার্যকর করতে আপনি কীভাবে অ্যাকশন পলিসি ব্যবহার করবেন তা শিখবেন।

এগিয়ে যান এবং একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করুন:

 

দ্রষ্টব্য: আমরা আমাদের উদাহরণ অ্যাপের জন্য Pico CSS শৈলী ব্যবহার করব, কিন্তু আপনি যা খুশি তা ব্যবহার করতে পারেন।

তারপর দ্রুত একটি Post ভারা রিসোর্স যা আমরা টিউটোরিয়ালের বাকি অংশ জুড়ে ব্যবহার করব:

 

এখন rails db:migrate দিয়ে মাইগ্রেশন চালান .

ব্যবহারকারী প্রমাণীকরণ সেট আপ করা হচ্ছে

এই নিবন্ধটি যতটা ব্যবহারকারীর অনুমোদন সম্পর্কে, আমাদের কিছু গুরুত্বপূর্ণ বিষয় রয়েছে যা কভার করতে হবে:ব্যবহারকারীর প্রমাণীকরণ। এটি ছাড়া, আমরা পরবর্তীতে সংজ্ঞায়িত করার চেষ্টা করি এমন কোনো অনুমোদন নীতি অকেজো হবে। কিন্তু স্ক্র্যাচ থেকে প্রমাণীকরণ লেখার প্রয়োজন নেই। চলুন Device ব্যবহার করি।

ডিভাইস ইনস্টল করা হচ্ছে

আপনার জেমফাইলে ডিভাইজ রত্ন যোগ করে শুরু করুন:

 

তারপর এটি ইনস্টল করুন এবং একটি User তৈরি করুন মডেল:

 

এছাড়াও, config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } যোগ করতে ভুলবেন না অ্যাপের ডেভেলপমেন্ট কনফিগারেশনে।

এর পরে, আসুন Post-এর জন্য বিভিন্ন ব্যবহারকারীর অ্যাক্সেসের পরিস্থিতি পরীক্ষা করার জন্য কয়েকটি মৌলিক ব্যবহারকারীর ভূমিকা প্রয়োগ করি সম্পদ।

ব্যবহারকারীর মৌলিক ভূমিকা সংজ্ঞায়িত করা

প্রথমে role যোগ করুন ব্যবহারকারী টেবিলে কলাম। একটি মাইগ্রেশন তৈরি করতে এই কমান্ডটি চালান:

 

দ্রষ্টব্য: আমরা ভূমিকার জন্য একটি পূর্ণসংখ্যা ডেটা টাইপ ব্যবহার করি, তাই আমরা একটি enum ব্যবহার করতে পারি — ভূমিকা বাস্তবায়নের একটি দ্রুত এবং সহজ উপায়৷

এখন rails db:migrate দিয়ে মাইগ্রেশন চালান , তারপর User খুলুন মডেল এবং এটি সম্পাদনা করুন:

 

এটি হয়ে গেলে, আসুন আমাদের ফোকাস অ্যাকশন পলিসি ইনস্টল করার দিকে নিয়ে যাই।

রুবি এবং রেলের জন্য অ্যাকশন নীতি সেট আপ করা হচ্ছে

অ্যাপটির Gemfile খুলুন এবং নীচের লাইন যোগ করুন:

 

তারপর bundle install কমান্ডটি চালান অ্যাকশন পলিসি ইনস্টল করতে।

চালানোর মাধ্যমে ইনস্টলেশন চূড়ান্ত করুন:

 

এটি আমাদের একটি ভিত্তি দেবে — ApplicationPolicy app/policies এর অধীনে ক্লাস :

 

অ্যাকশন নীতির মৌলিক ব্যবহার

কর্ম নীতির মূল ভিত্তি হল একটি policy ক্লাস, ApplicationPolicy , যেখানে আপনি বিশ্বব্যাপী কনফিগারেশনগুলিকে সংজ্ঞায়িত করতে পারেন যেখান থেকে সমস্ত নীতিগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে৷ একটি ভাল সুপারিশ হল সমস্ত নীতি app/policies এর অধীনে রাখা , এবং আপনার অ্যাপের রিসোর্স অনুযায়ী নীতি আলাদা করতে। উদাহরণস্বরূপ, যদি আপনার একটি Post থাকে সম্পদ, সংশ্লিষ্ট নীতি PostPolicy হওয়া উচিত , CommentPolicy একটি Comment এর সাথে থাকবে সম্পদ, এবং আরও অনেক কিছু।

অ্যাকশন পলিসি নিয়ে কাজ করার সময় আরও একটি বিষয় বিবেচনা করতে হবে:নিয়মের সংজ্ঞা অবশ্যই নীতি ক্লাসে পাবলিক পদ্ধতির মধ্যে ঘটতে হবে। একটি ব্যক্তিগত পদ্ধতি ব্যবহার করা একটি ত্রুটি বাড়াবে৷

এগিয়ে চলুন, আসুন একটি PostPolicy তৈরি করতে এই তথ্য ব্যবহার করি যেখানে আমরা ক্রমান্বয়ে ব্যবহারকারীর অ্যাক্সেসের বিভিন্ন স্তর তৈরি করব।

আমাদের প্রথম নীতি তৈরি করা

post_policy.rb নামে একটি নতুন ফাইল তৈরি করুন৷ app/policies এর অধীনে :

 

এখানে, আমরা Post-এ একটি সহজ নিয়ম সংজ্ঞায়িত করি যে কেউ একটি Post অ্যাক্সেস করতে পারে বলে ঘোষণা করছে সম্পদ .

ব্যবহারকারীদের সাথে পোস্ট সংযুক্ত করা

এই নতুন পোস্ট নীতির সাথে কাজ করতে, আমাদের Post পরিবর্তন করতে হবে রিসোর্সটি আমরা আগে তৈরি করেছি যাতে এটি তৈরিতে লগ-ইন করা ব্যবহারকারীর সাথে যুক্ত থাকে (একটি user_id যোগ করে পোস্ট টেবিলের কলাম):

 

তারপর rails db:migrate দিয়ে মাইগ্রেশন চালান .

পরবর্তী, এই পরিবর্তনের জন্য আমাদের পোস্ট কন্ট্রোলার পরিবর্তন করতে হবে। প্রথমে user_id যোগ করা যাক অনুমোদিত post_params তে :

 

তারপর create পরিবর্তন করুন কর্ম:

 

এর পরে, আসুন PostsController সুরক্ষিত করি .

নিয়ন্ত্রকগুলিতে অনুমোদন বাস্তবায়ন

আমাদের PostsController পরিবর্তন করতে হবে শুধুমাত্র লগ-ইন করা ব্যবহারকারীদের অ্যাক্সেসের অনুমতি দিতে একটি কলব্যাক সহ:

 

এর পরে, কিছু মৌলিক ব্যবহারকারী অ্যাক্সেস নিয়ন্ত্রণ যোগ করতে নতুন পোস্ট নীতি ব্যবহার করা যাক:

 

এখানে, আমরা পোস্ট কন্ট্রোলারের update-এ একটি অ্যাক্সেস নিয়ম সংজ্ঞায়িত করি এবং destroy কর্ম আমরা নির্দিষ্ট করি যে একটি পোস্টের লেখক (বা "লেখক" ভূমিকা সহ একজন ব্যবহারকারী) একটি পোস্ট আপডেট করতে পারেন, কিন্তু শুধুমাত্র একটি পোস্টের লেখক একটি পোস্ট মুছে ফেলতে পারেন৷

দ্রুত পরামর্শ: কর্ম নীতি current_user উল্লেখ করতে পারে Devise দ্বারা প্রদত্ত এবং এটি একটি user এ বরাদ্দ করে৷ নীতির মধ্যে।

এর পরে, আমাদের পোস্ট কন্ট্রোলারে অ্যাক্সেসের নিয়মটি ব্যবহার করতে হবে যেমন:

 

পোস্ট কন্ট্রোলারে অ্যাক্সেসের নিয়ম প্রয়োগ করার সাথে সাথে, আমাদের পরবর্তী পদক্ষেপ হল দৃশ্যগুলি সুরক্ষিত করা নিশ্চিত করা।

অনুমোদনের মাধ্যমে ভিউ সুরক্ষিত করা

নীচের স্ক্রিনশটে, একজন ব্যবহারকারীর ইমেল <user2@example.com> এবং "পাঠক" ভূমিকা লগ ইন করা হয়েছে৷ আপনি দেখতে পাচ্ছেন, এই ব্যবহারকারী <user@example.com> দ্বারা তৈরি পোস্টটি দেখতে পারেন , এবং এমনকি তাদের এই পোস্টের জন্য লিঙ্কগুলি সম্পাদনা এবং মুছে ফেলার অ্যাক্সেস রয়েছে৷ এটি আদর্শ নয় — সম্পাদনা এবং মুছে ফেলা লিঙ্কগুলি শুধুমাত্র পোস্টের লেখকের কাছে উপলব্ধ হওয়া উচিত৷

রুবি অন রেলে মাস্টারিং অ্যাকশন পলিসি:সুরক্ষিত অনুমোদনের জন্য একটি ব্যবহারিক গাইড

আমাদের প্রথম কাজ হবে কোন পোস্টের লেখক নন এমন ব্যবহারকারীদের জন্য এই লিঙ্কগুলিতে অ্যাক্সেস অপসারণ করা৷ যেহেতু আমরা ইতিমধ্যে এই অ্যাক্সেসের নিয়মটি সংজ্ঞায়িত করেছি, তাই আমাদের শুধুমাত্র এটি show এ প্রয়োগ করতে হবে অ্যাকশন পলিসির নিফটি allowed_to? ব্যবহার করে দেখুন পদ্ধতি:

 

এই নিয়ম প্রয়োগের সাথে, আমরা এখন পোস্টের show রিফ্রেশ করতে পারি পৃষ্ঠা এবং দেখুন আমরা কি পাই:

রুবি অন রেলে মাস্টারিং অ্যাকশন পলিসি:সুরক্ষিত অনুমোদনের জন্য একটি ব্যবহারিক গাইড

যে ব্যবহারকারীর অ্যাক্সেস ছিল সেই একই ব্যবহারকারী এখন পোস্টের দৃশ্যে থাকাকালীন তারা যা করতে পারেন তাতে সীমিত৷

র্যাপিং আপ

এই দুই পর্বের সিরিজের প্রথম অংশে, আমরা অনুমোদন রত্ন অ্যাকশন পলিসির চারপাশে কিছু মৌলিক বিষয় শিখেছি।

দ্বিতীয় এবং চূড়ান্ত অংশে, আমরা আরও কিছু উন্নত ব্যবহারের ক্ষেত্রে অন্বেষণ করব।

শুভ কোডিং!

পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!


  1. Tkinter ব্যবহার করে ছবিগুলিকে PDF এ রূপান্তর করুন

  2. পাথ ক্লাস ব্যবহার করে জাভাএফএক্সে কাস্টম আকার আঁকবেন কীভাবে?

  3. লেভেল লিঙ্কড (2,4)-ডেটা স্ট্রাকচারে গাছ

  4. পাইথনে একটি লগ হিস্টোগ্রাম কীভাবে তৈরি করবেন?