Django rest framework Django REST框架:检查用户是否在组中
我想知道创建自定义权限以检查用户是否在特定组中的最佳方法。以前,我有一个装饰器,我可以在视图上使用它来传递组名的元组以及用户对象,然后检查该用户是否在指定的组中 即: 考虑到我需要检查不同操作(POST、PUT、GET)的不同组成员身份,如何为视图集的DRF执行此操作 非常感谢,,Django rest framework Django REST框架:检查用户是否在组中,django-rest-framework,Django Rest Framework,我想知道创建自定义权限以检查用户是否在特定组中的最佳方法。以前,我有一个装饰器,我可以在视图上使用它来传递组名的元组以及用户对象,然后检查该用户是否在指定的组中 即: 考虑到我需要检查不同操作(POST、PUT、GET)的不同组成员身份,如何为视图集的DRF执行此操作 非常感谢,, Ben参数化权限类的合理方法是将参数放在view类上。这将允许您在不同的视图中更改行为 下面是一个例子: # permissions.py from django.contrib.auth.models import
Ben参数化权限类的合理方法是将参数放在view类上。这将允许您在不同的视图中更改行为 下面是一个例子:
# permissions.py
from django.contrib.auth.models import Group
from rest_framework import permissions
def is_in_group(user, group_name):
"""
Takes a user and a group name, and returns `True` if the user is in that group.
"""
try:
return Group.objects.get(name=group_name).user_set.filter(id=user.id).exists()
except Group.DoesNotExist:
return None
class HasGroupPermission(permissions.BasePermission):
"""
Ensure user is in required groups.
"""
def has_permission(self, request, view):
# Get a mapping of methods -> required group.
required_groups_mapping = getattr(view, "required_groups", {})
# Determine the required groups for this particular request method.
required_groups = required_groups_mapping.get(request.method, [])
# Return True if the user has all the required groups or is staff.
return all([is_in_group(request.user, group_name) if group_name != "__all__" else True for group_name in required_groups]) or (request.user and request.user.is_staff)
然后可以像这样使用HasGroupPermission
类:
# views.py
class MyView(APIView):
permission_classes = [HasGroupPermission]
required_groups = {
'GET': ['moderators', 'members'],
'POST': ['moderators', 'someMadeUpGroup'],
'PUT': ['__all__'],
}
...
希望有帮助 谢谢你的帮助
# views.py
class MyView(APIView):
permission_classes = [HasGroupPermission]
required_groups = {
'GET': ['moderators', 'members'],
'POST': ['moderators', 'someMadeUpGroup'],
'PUT': ['__all__'],
}
...