如何在 django-rest-framework 中使用 django groups 和 perms

How to use django groups and perms in django-rest-framework

如何使用 django-rest-framework 在任何 API 中处理复杂的所需权限?

例如,您有三层支持操作员可以访问 APIs,但他们应该只能访问各自的端点,作为最后一层,超级管理员应该掌握一切。

如何通过django组和权限解决这个简单的问题?

有很多答案与 permission_classes 中的 AND 或 OR 烫发相关,比如

def get_permissions(self):
    return (
    IsAuthenticated & (IsCommitteeHead|IsCommitteeMember|IsAdminUser)
    )()

permission_classes = [IsAuthenticated &(IsCommitteeHead|IsCommitteeMember|IsAdminUser)]

但我认为硬编码总是让代码变得一团糟!

从 django 基本模型权限创建新的权限模型权限,如下所示:

from rest_framework.permissions import DjangoModelPermissions


class FullDjangoModelPermissions(DjangoModelPermissions):
    perms_map = {
        'GET': ['%(app_label)s.view_%(model_name)s'],
        'OPTIONS': ['%(app_label)s.view_%(model_name)s'],
        'HEAD': ['%(app_label)s.view_%(model_name)s'],
        'POST': ['%(app_label)s.add_%(model_name)s'],
        'PUT': ['%(app_label)s.change_%(model_name)s'],
        'PATCH': ['%(app_label)s.change_%(model_name)s'],
        'DELETE': ['%(app_label)s.delete_%(model_name)s'],
    }

并且在视图 class 中是这样的:

class SomeAwuful(GenericAPIView):
    ...
    permission_classes = [FullDjangoModelPermissions]
    ...

然后你可以进入 Django 管理仪表板并设置谁可以访问什么,或者创建组来访问功能,如下所示: