authenticate বনাম permission
authenticate দ্বারা চেক করা হয় লগইন আছে কিনা আর পারমিশন দ্বারা বিভিন্ন পারমিশন চেক করা হয় এটা দিয়ে confushion তৈরী হয় এজন্য ক্লিয়ার করলাম authenticate আমাদের জানাই রিকোয়েস্ট টি ভ্যালিড ইউজার থেকে আসতেছে
ডিআরএফ-এ অনুমতির ভূমিকা
DRF-এর অনুমতি হল আপনার API এন্ডপয়েন্ট কে অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করার একটি উপায়। DRF বিভিন্ন অন্তর্নির্মিত অনুমতি ক্লাস সরবরাহ করে যা আপনি বাক্সের বাইরে ব্যবহার করতে পারেন, সেইসাথে আপনার নির্দিষ্ট প্রয়োজনীয়তা অনুসারে কাস্টম অনুমতি ক্লাস তৈরি করার নমনীয়তা।
অন্তর্নির্মিত অনুমতি ক্লাস
ডিআরএফ বেশ কয়েকটি অন্তর্নির্মিত অনুমতি ক্লাস সরবরাহ করে যা আপনি আপনার প্রয়োজনের উপর ভিত্তি করে ব্যবহার করতে পারেন:
- AllowAny : ভিউতে সীমাহীন অ্যাক্সেসের অনুমতি দেয়। এটি সাধারণত পাবলিক এন্ডপয়েন্টের জন্য ব্যবহৃত হয়।
- IsAuthenticated : ভিউ অ্যাক্সেস করার জন্য ব্যবহারকারীকে প্রমাণীকরণ করতে হবে। এন্ডপয়েন্টগুলির জন্য দরকারী যেগুলি শুধুমাত্র লগ ইন করা ব্যবহারকারীদের দ্বারা অ্যাক্সেস করা উচিত৷
- IsAdminUser : ভিউ অ্যাক্সেস করার জন্য ব্যবহারকারীকে একজন স্টাফ ব্যবহারকারী হতে হবে (অর্থাৎ,
is_staff
সেট করেছেন )।True
- IsAuthenticatedOrReadOnly : প্রমাণীকৃত ব্যবহারকারীদের যেকোনো অনুরোধের ধরন (GET, POST, PUT, DELETE) সম্পাদন করার অনুমতি দেয়, যখন অননুমোদিত ব্যবহারকারীদের শুধুমাত্র পঠনযোগ্য ক্রিয়াকলাপ (GET) সম্পাদন করার অনুমতি দেয়।
- DjangoModelPermissions : অ্যাক্সেস নিয়ন্ত্রণ করতে Django এর অন্তর্নির্মিত মডেল অনুমতি ব্যবহার করে। যে মডেলটি অ্যাক্সেস করা হচ্ছে তাতে ব্যবহারকারীর নির্দিষ্ট অনুমতি থাকা প্রয়োজন।
- DjangoObjectPermissions : অনুরূপ
DjangoModelPermissions
, কিন্তু সম্পূর্ণ মডেলের পরিবর্তে পৃথক বস্তুতে অনুমতি প্রয়োগ করে।
settings.py
# REST Framework settings
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
# Add other authentication classes if needed
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
# Add other permission classes if needed
],
}
Basic Authentication
# myapp/views.py
from rest_framework import generics
from rest_framework.authentication import BasicAuthentication
from .models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
authentication_classes = [BasicAuthentication]
Session Authentication
from rest_framework import generics
from rest_framework.authentication import SessionAuthentication
from .models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
authentication_classes = [SessionAuthentication]
Both With Permission Class
from rest_framework import generics
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from .models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
authentication_classes = [SessionAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated]
আমরা “Authentication” এবং “Permission” দুটি প্রধান বিষয় নিয়ে আলোচনা করব।
- Authentication (অনুমোদন):
- Authentication হলো ব্যবহারকারীর পরিচয় যাচাই করা। এটি নির্দিষ্ট ব্যবহারকারী কে সিস্টেমে লগ ইন করা দেয়।
- উদাহরণস্বরূপ, একটি সাইটে লগ ইন করার সময় ব্যবহারকারীর ইমেইল এবং পাসওয়ার্ড যাচাই করা হলে এটি Authentication হিসেবে কাজ করে।
- Permission (অনুমতি):
- Permission হলো একটি ব্যবহারকারীর কাছে নির্দিষ্ট কাজ করার অনুমতি প্রদান করা।
- উদাহরণস্বরূপ, একটি ওয়েবসাইটে ব্যবহারকারী একটি পোস্ট পোস্ট করতে পারে কিনা তা দেখার জন্য “পোস্ট লিখতে” অনুমতি প্রদান করা হতে পারে।
এখন, দুটির মধ্যে পার্থক্য হলো:
- শুধুমাত্র Authentication ব্যবহার করে যখন অনুমতি প্রদান করা হয় না, তখন যেকোনো প্রমাণিত ব্যবহারকারী একটি দৃশ্যমান পোস্টে অ্যাক্সেস করতে পারে।
- যখন আপনি একই সাথে Authentication এবং Permission ব্যবহার করেন, তখন প্রথমে ব্যবহারকারীর পরিচয় যাচাই করা হয়। পরবর্তীতে, ব্যবহারকারীর অনুমতি পরিচয় করা হয় যাতে শুধুমাত্র উপযুক্ত অনুমতি সাম্প্রতিক অনুরোধের জন্য ব্যবহৃত হতে পারে।
সুতরাং, এই পার্থক্যের সাথে পরিচিতি রেখে, এখন আপনি আপনার প্রকৃত প্রয়োজনে কোনও পদক্ষেপ নিতে পারেন।