2016-06-22 41 views
1

我只想管理員將內容添加到模型,但可以由任何人讀取。是否有任何現有的權限類,我可以使用相同的。或者這將是沒有對象級別permissions.Code的最佳方法同樣是Django的REST框架許可「isAdminorReadonly」

class TagList(generics.ListCreateAPIView): 
    serializer_class = TagSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('title',) 
    def get_queryset(self): 
     return Tag.objects.all() 
+1

你有沒有看着['DjangoModelPermissionsOrAnonReadOnly'](http://www.django-rest-framework.org/API引導/許可/#djangomodelpermissionsoranonreadonly)?只有匿名用戶才能閱讀,只要您分配了正確的權限,管理員就可以對其進行編輯。 – Alasdair

回答

0

是,有現有權限類DjangoModelPermissionsOrAnonReadOnly,您可以使用。

將會進行授權,如果用戶進行身份驗證並具有分配所涉及的對象的權限也將允許未授權的用戶有隻讀訪問API。

class TagList(generics.ListCreateAPIView): 
    ... 
    # add both permission classes 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, permissions.DjangoModelPermissionsOrAnonReadOnly,) 

DRF documentation:

DjangoModelPermissions
此權限類關係到Django的 標準django.contrib.auth model權限。此權限必須 僅適用於具有.queryset屬性集的視圖。如果用戶是authenticated和 具有分配了相關模型的權限 授權纔會被授予。

POST請求要求用戶在 模型上擁有add權限。
PUTPATCH請求需要用戶對模型的change 許可。
DELETE請求需要用戶對模型的 delete許可。

DjangoModelPermissionsOrAnonReadOnly
DjangoModelPermissions類似,也可以讓未經授權的用戶具有對API 只讀訪問。

2

讓我們針對您的問題。

  1. 是否有任何現有的權限類,我可以使用相同的?

Ans:沒有drf(直到第3版)提供的權限來提供對管理員的完全訪問權限和任何人(我相信匿名)。

  • 會有什麼不對象級權限的最佳方法?
  • 答:我建議有一個自定義視圖級權限如下:

    from rest_framework.permissions import IsAdminUser, SAFE_METHODS 
    
    class IsAdminUserOrReadOnly(IsAdminUser): 
    
        def has_permission(self, request, view): 
         is_admin = super(
          IsAdminUserOrReadOnly, 
          self).has_permission(request, view) 
         # Python3: is_admin = super().has_permission(request, view) 
         return request.method in SAFE_METHODS or is_admin