【问题标题】:Default permissions class for DRFDRF 的默认权限类
【发布时间】:2017-07-06 05:35:32
【问题描述】:

Django rest 框架目前有IsAdminUser作为权限类,是否也有对应的IsOwnerOrAdminUser?有什么影响?如果当前用户是创建对象的人,似乎应该有一些东西只允许对象具有 CRUD 功能。我正在使用 DRF 和 djangorestframework-jwt

【问题讨论】:

  • 您需要对象级别的权限吗?
  • 那将是理想的
  • 你说IsOwnerOrAdminUser。哪家的???
  • 创建对象的用户
  • 你必须实现一个基于对象的权限。

标签: django django-rest-framework


【解决方案1】:

permissions.py

​​>
from rest_framework import permissions

class IsOwnerOrAdminUser(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_staff 

views.py

​​>
from .permissions import IsOwnerOrAdminUser

class UserAPIView(APIView):
    permission_classes = (IsOwnerOrAdminUser, )

【讨论】:

    【解决方案2】:

    您可以在docs 中找到完整的 rest-framework 权限列表。 DjangoModelPermissionsOrAnonReadOnly 只允许对模型具有添加、更改和删除权限的用户使用非安全方法。 如果它不符合您的要求,您可以实现自己的权限类,如下所示:

    class IsOwnerOrReadOnly(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_superuser
    

    此方法记录在here

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 2018-03-21
      • 2012-02-24
      • 2023-03-08
      • 1970-01-01
      • 2020-02-01
      • 2021-03-30
      • 2014-10-12
      • 2017-10-08
      相关资源
      最近更新 更多