2016-09-15 31 views
0

我想爲創建操作(後)設置權限。我不知道這件事很熱。如何在rest_framework中爲創建操作設置權限

這是我的代碼:

在permissions.py

class IsAdmin(permissions.BasePermission): 
    def has_object_permission(self, request, view, category): 
     if request.user.role == "admin": 
      return request.user.role == "admin" 
     return False 

鑑於

類CategoryViewSet(viewsets.ModelViewSet):

queryset = Category.objects.all() 
serializer_class = CategorySerializer 

def get_permissions(self): 
    if self.request.method in permissions.SAFE_METHODS: 
     return (permissions.DjangoModelPermissions(),) 
    return (permissions.IsAuthenticated(), IsAdmin(),) 

回答

0

只需設置permission_classes上該視圖直接:

class CategoryViewSet(viewsets.ModelViewSet): 

    queryset = Category.objects.all() 
    serializer_class = CategorySerializer 
    permission_classes = [IsAccountAdminOrReadOnly] 
+0

如果你能看到,它是一個自定義的管理不STANDAR定義IsAdmin:request.user.role ==「管理員」 –

+0

所以把只讀查詢到自己的權限類(和其重命名爲更好的東西像'IsAdminOrReadOnly'),然後使用這個類的viewset.permission_classes – wim

+0

已經我已經解決了它...我已經改變了方法'has_object_permission(個體經營,請求,查看,類別)''爲has_permission (自我,請求,觀點)'和它的工作應該是...;) –

0

了,我已經解決了,只是我在我的permissions.py文件更改,方法:

def has_object_permission(self, request, view, category): 
    if request.user.role == "admin": 
     return request.user.role == "admin" 
    return False 

此方法:

def has_permission(self, request, view): 
    if request.user.role == "admin": 
     return request.user.role == "admin" 
    return False 

這很簡單,我複雜太多

相關問題