Вы можете получить User
от request.user
. Я не знаю, как вы можете получить Group
из запроса (это может быть в полезной нагрузке запроса, это зависит от вашего дизайна), но давайте предположим, что вы передаете Group
в класс разрешений, тогда это будет что-товот так:
class IsGroupAdmin(BasePermission):
"""
Allows access only to Group Admin.
"""
def __init__(self, group):
super().__init__()
self.group = group
def has_permission(self, request, view):
return self.group.profile_set.filter(auth_user=request.user).any()
Примечание: если вы можете получить группу из запроса, вам не нужно передавать group
в класс IsGroupAdmin
, и это будет намного проще. Но если вы не можете этого сделать и собираетесь использовать только указанный выше класс разрешений, вам понадобится функция partial
. поэтому вам нужно импортировать его:
from functools import partial
А затем в представлениях инициировать permission_classes
следующим образом:
permission_classes = [partial(IsGroupAdmin, group)]
Однако я предлагаю вам использовать более простой способ, потому чтоЯ думаю, что group
должно быть в request
. Допустим, group
находится в полезной нагрузке запроса, тогда вы должны реализовать IsGroupAdmin
как:
class IsGroupAdmin(BasePermission):
"""
Allows access only to Group Admin.
"""
def has_permission(self, request, view):
group = request.data.get('group', '')
return group.profile_set.filter(auth_user=request.user).any()
И использовать его как обычное разрешение. (не нужно использовать partial
функцию)