2017-08-08 30 views
0

我有如下一個views.py,Django的休息權限允許雙方IsAdmin和自定義權限

from webapi.permissions import IsOwner 

class MemberDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = members.objects.all() 
    serializer_class = MemberSerializer 
    permission_classes = (permissions.IsAdminUser,IsOwner) 

而下面是檢查自定義權限,如果用戶是在奧爾對象webapi.permissions的,

class IsOwner(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
      return obj.owner == request.user 

現在的問題是檢查他是否是管理員用戶並給予更新/刪除權限但是如果擁有者是用戶,它實際上應該授權編輯他的數據,但是在這種情況下它是失敗的。

在見到這個問題:「Django Rest Framework won't let me have more than one permission」我試過如下也是它仍然沒有當我使用或者如果我使用,或與錯誤在運行時爲「‘條件’未能正常工作,

class MemberDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = members.objects.all() 
    serializer_class = MemberSerializer 
    permission_classes = (Or(permissions.IsAdminUser,IsOwner)) 

對象不是可迭代」

回答

1

如果你需要給編輯權限只有管理員和所有者的用戶,可以實現自定義權限類:

class IsOwnerOrAdmin(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
     if request.method in permissions.SAFE_METHODS: 
      return True 
     return obj.owner == request.user or request.user.is_admin 

而且只用這一個視圖:

permission_classes = [IsOwnerOrAdmin] 

這方法記錄在here

+0

這可以更好地工作,我刪除了Or並使用了自定義權限。 –

1

您使用的元組的語法,但你需要逗號作爲一個元組

取代
permission_classes = (Or(permissions.IsAdminUser,IsOwner))
permission_classes = (Or(permissions.IsAdminUser,IsOwner),)

+0

是的,這不給任何錯誤,但現在仍是任何人都可以編輯它意味着Permissions.IsAdminUser和IsOwser不生效 –

+0

其中'或'你用,有沒有內置在靜止狀態框架 –

+0

我使用pip安裝並使用模塊「from rest_condition import或 」,模塊「https://pypi.python.org/pypi/rest_condition」 –