Permission 
 Permission 
 DRFμ Permission System 
- νμ¬ μμ²μ λν νμ©β’κ±°λΆλ₯Ό κ²°μ νλ©° APIView λ¨μλ‘ μ§μ μ΄ κ°λ₯
AllowAny (λν΄νΈ μ μ μ€μ ) : μΈμ¦ μ¬λΆμ μκ΄μμ΄ λ·° νΈμΆμ νμ© 
IsAuthenticated : μΈμ¦λ μμ²μ νν΄μ λ·° νΈμΆ νμ© (λ‘κ·ΈμΈμ΄ λμ΄μμ΄μΌλ§ μ κ·Ό νμ©) 
IsAdminUser : Staff μΈμ¦ μμ²μ νν΄μ λ·° νΈμΆ νμ© 
IsAuthenticatedOrReadOnly : λΉμΈμ¦ μμ²μκ²λ μ½κΈ° κΆνλ§ νμ© (λ‘κ·ΈμΈμ΄ λμ΄ μμ§μμλ μ‘°νλ κ°λ₯) 
DjangoModelPermissons : μΈμ¦λ μμ²μ ννμ¬ λ·° νΈμΆ νμ©, μΆκ°λ‘ μ₯κ³  λͺ¨λΈ λ¨μ Permissions μ²΄ν¬ 
DjangoModelPermissionsOrAnonReadOnly : DjangoModelPermissionsμ μ μ¬, λΉμΈμ¦ μμ²μκ²λ μ½κΈ°λ§ νμ© 
DjangoObjectPermissons : λΉμΈμ¦ μμ²μ κ±°λΆ, μΈμ¦λ μμ²μ Objectμ λν κΆν μ²΄ν¬ μν 
 
SAFE_METHODS = ('GET', 'HEAD', 'OPTIONS')
class AllowAny(BasePermission):
    def has_permission(self, request, view):
        return True
      
class IsAuthenticated(BasePermission):
    def has_permission(self, request, view):
        return request.user and request.user.is_authenticated
       
class IsAdminUser(BasePermission):
    def has_permission(self, request, view):
        return request.user and request.user.is_staff
class IsAuthorOrReadOnly(permissions.BasePermission):
    
    def has_permission(self, request, view):
        return request.user.is_authenticated
   
    
    def has_object_permission(self, request, view, obj):
        
        if request.method in permissions.SAFE_METHODS:
            return True
        
        return obj.author == request.user
class IsAuthorUpdateOrReadOnly(permissions.BasePermission):
    def has_permission(self, request, view):
        return request.user.is_authenticated
   
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        if request.method == 'DELETE':
            return request.user.is_superuser 
        return obj.author == request.user
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES' : [
         'rest_framework.permissions.IsAuthenticated',
    ]
}
from rest_framework.permissions import IsAuthenticated
class ExampleView(APIView):
    permissions_classes = [IsAuthenticated]
   
    def get(self, request, format=None):
        content = {'status' : 'request was permitted'}
        return Response(content)
from rest_framework.decorators import permission_classes
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def example_view(request, format=None)
    content = {'status' : 'request was permitted'}
    returnn Response(content)
 Custom Permission 
- λͺ¨λ  Permission ν΄λμ€λ λ€μ 2κ°μ§ ν¨μλ₯Ό μ νμ μΌλ‘ ꡬν
has_permission(request, view)
- APIView μ κ·Ό μ 체ν¬
 
- κ±°μ λͺ¨λ  Permission ν΄λμ€μμ ꡬνλλ©° λ‘μ§μ λ°λΌ 
True/False λ°ν 
 
has_object_permission(request, view, obj)
- APIViewμ 
get_object ν¨μλ₯Ό ν΅ν΄ object νλ μμ μ²΄ν¬ 
- κΈ°μ‘΄μ Mixin μμ λ°μ κ²½μ°
RetrieveModelMixin, UpdateModelMixi, DestroyModelMixinμμ get_object() μ¬μ© 
DjangoObjectPermissionsμμ ꡬννλ©° λ‘μ§μ λ°λΌ True/False λ°ν 
 
 
- κΈ°λ³Έμ μΌλ‘ Custom Permissionλ€μ 
BasePermissionμ μμλ°μ μμ±νκ² λ¨
- Permissionμ 
has_object_permissionμ΄ μλ has_permissionμ ν΄λΉ μμ²μ΄ λ€μ΄μ¬ λ νμ μ€νμ΄ λ¨ 
has_object_permissionμ΄ λ€μ΄μ€κΈ° μ μλ has_permissionμ μ°μ  κ±°μΉ ν μ€νμ΄ λκ³  APIViewμμ μμ μλμΌλ‘ μ€νμ΄ λ¨ 
- νμ§λ§ 
has_object_permissionμ κ²½μ° λ³λμ νΈμΆ κ³Όμ μ΄ νμ 
 
from django.contrib.auth import get_user_model
from rest_framework.permissions import BasePermission, SAFE_METHODS
class IsOwnerOnly(BasePermission):
    
    def has_object_permission(self, request, view, obj):
        if request.user.is_authenticated:
            
            if request.user.role == '10':
                return True
            elif hasattr(obj, 'profile'):
                return obj.profile.id == request.user.id
            elif obj.__class__ == get_user_model():
                return obj.id == request.user.id
            return False
        else:
            return False