如何在 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 管理仪表板并设置谁可以访问什么,或者创建组来访问功能,如下所示:
如何使用 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 管理仪表板并设置谁可以访问什么,或者创建组来访问功能,如下所示: