2016-03-15 70 views
1

所以我在這裏看到了幾個關於SO的問題,它們是相似的,但不是我想要的。Django REST框架 - 同一視圖中的每種方法的不同許可

我試圖在同一視圖中爲每個方法擁有不同的權限。我目前有:

class MyViewSet(viewsets.ViewSet): 
    # User must be authenticated 
    permission_classes = (IsAuthenticated,) 

    def list(self, request): 
     ... 

    # User must be admin 
    def create(self, request): 
     ... 

    def retrieve(self, request): 
     ... 

基本上我想,以確保只有管理員可以調用create方法。我已經着眼於創建自定義權限,但這適用於視圖集,這不是我想要的。

回答

2

我認爲是沒有內置的解決方案。但您可以通過覆蓋get_permissions方法來實現此目的。

class MyViewSet(viewsets.ViewSet): 

    permission_classes_by_action = {'create': [IsAdminUser] 
            'default': [IsAuthenticated]} 

    def get_permissions(self): 
     try: 
      # return permission_classes depending on `action` 
      return [permission() for permission in self.permission_classes_by_action[self.action] 
     except KeyError: 
      # action is not set return default permission_classes 
      return [permission() for permission in self.permission_classes_by_action['default']] 
+0

有人可以解釋downvote嗎? – ilse2005

0

也許你可以做到這一點

def create(self, request): 
    if request.user.is_superuser: 
     .... 
相關問題