2016-07-18 8 views
0

Я новичок в DRF, и я столкнулся со следующей проблемой при попытке настроить Permission в DRF.Django Rest Framework permission_class

Предположим, я имел следующий код в моем permissions.py файле:

class GetPermission(BasePermission): 
    obj_attr = 'POITS' 

    def has_permission(self, request, view): 
     user = request.user 
     employee = Employee.objects.get(user=user) 
     # Return a dict which indicates whether the request user has the corresponding permissions 
     permissions = get_permission(employee.id) 
     return permissions[GetPermission.obj_attr] 

И на мой взгляд, я хочу, чтобы переопределить статическую переменную в классе GetPermission:

class AssignmentList(generics.ListCreateAPIView): 
    GetPermission.obj_attr = 'ASSIGNMENT' 
    permission_classes = (IsAuthenticated, IsStaff, GetPermission) 
    queryset = Assignment.objects.all() 
    serializer_class = AssignmentSerializer 
    pagination_class = LargeResultsSetPagination 

    def perform_create(self, serializer): 
     employee = Employee.objects.get(user=self.request.user) 
     serializer.save(sender=employee, status=0, operatable=0) 

Однако, как указано в документации DRF:

Проверка разрешений всегда выполняется в самом начале представления, r код разрешен.

Так как я должен делать, заранее спасибо, любые идеи будут приветствоваться, так как я новая рыба для DRF.

+0

Я не понимаю ваш вопрос. Как этот класс разрешений несовместим с запуском в начале представления? –

+0

Для разных видов я хочу использовать класс GetPermission с другим значением obj_attr. – shady

ответ

0

Вам необходимо создать подклассы вашего разрешения для каждого атрибута и использовать self.obj_attr внутри метода has_permission.

class DefaultPermission(GetPermission): 
    obj_attr = 'POITS' 

class AssignmentPermission(GetPermission): 
    obj_attr = 'ASSIGNMENT' 
+0

У меня есть куча атрибутов разрешений, что означает, что мне нужно много подкласса для каждого атрибута? Мне было интересно, есть ли лучший способ. – shady