Ответ 1
Разумным способом параметризации классов разрешений является включение параметров в класс представления. Это позволит вам изменить поведение в представлении для просмотра.
Вот пример:
def is_in_group(user, group_name):
"""
Takes a user and a group name, and returns `True` if the user is in that group.
"""
return Group.objects.get(name=group_name).user_set.filter(id=user.id).exists()
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.
return all([is_in_group(request.user, group_name) for group_name in required_groups])
Затем вы можете использовать класс HasGroupPermission
следующим образом:
class MyView(APIView):
permission_classes = [HasGroupPermission]
required_groups = {
'GET': ['moderators', 'members'],
'POST': ['moderators'],
}
...
Надеюсь, что это поможет!