2013-06-19 23 views
5

Tôi đang tạo api dựa trên lớp cho ứng dụng tài liệu, nhưng tôi muốn thêm quyền cụ thể vào các định nghĩa bài đăng và bản vá trong APIView của mình. Ví dụ:Cách thêm quyền trong Khung Django Rest cho các yêu cầu cụ thể

class DocumentList(APIView): 

    def get(self,request,format=None): 
     ... blah 

    def post(self,request,format=None): 
     only allow administrators to create new documents 
     ... blah 

Trả lời

2

By default permissions are unrestricted. Trong số settings.py, bạn có thể chỉ định một nhóm mặc định khác cho nơi người dùng phải được xác thực và có quyền mô hình Django chính xác. Bạn sẽ cần chỉ định thuộc tính model trên lớp xem của mình cho DjangoModelPermissions để có hiệu lực.

# settings.py 
REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
     'rest_framework.permissions.DjangoModelPermissions' 
    ) 
} 

# views.py 
class DocumentList(APIView): 
    model = Document 
    ... 

Bản đồ DjangoModelPermissions phép can be found in the source.

  • GET, OPTIONS và TRỤ không đòi hỏi phải có sự cho phép nhưng vì chúng ta quy định IsAuthenticated chúng tôi vẫn đang đòi hỏi rằng bản đồ
  • POST để thêm
  • PUT và PATCH bản đồ để thay đổi
  • DELETE bản đồ để xóa
0

Đây là những gì tôi đã làm. Tài liệu tham khảo từ các documentation

Tạo lớp phép cho dự án

dự án/permissions.py

from rest_framework import permissions 

class IsAuthenticatedOrReadOnly(permissions.BasePermission): 

    def has_object_permission(self, request, view, obj): 
     # Read permission - always allow for GET request 
     if request.method in permissions.SAFE_METHODS: 
      return True 

     # Write permissions - only if authenticated 
     return request.user and request.user.is_authenticated() 

Bây giờ sử dụng PermissionClass này trong giao diện

@permission_classes((IsAuthenticatedOrReadOnly,)) 
class ShopViewSet(viewsets.ModelViewSet): 
    queryset = Shop.objects.all() 
    serializer_class = ShopSerializer 
Các vấn đề liên quan