Django GrahpQL ACL?

Существует ли в Django GraphQL ACL? Например, вы не можете получить доступ к запросу/мутации, если у пользователя нет разрешения.

Например, пользователь, вошедший в систему, имеет разрешение только на запрос/мутацию продуктов, но не имеет разрешения на запрос/мутацию человеческих ресурсов. Как я могу вернуть сообщение об ошибке типа "Permission Denied!"?

Если вы используете graphene-django-cud (для мутаций), есть хук check_permissions, который вы можете подключить к , чтобы вызвать ошибку, если вы не хотите, чтобы определенный пользователь делал что-то.

from graphene_django_cud.mutations import DjangoUpdateMutation
from graphql import GraphQLError

class UpdateUserMutation(DjangoUpdateMutation):
    class Meta:
        model = User
        login_required = True

    @classmethod
    def check_permissions(cls, root, info, input, id, obj):
        if not can_update(obj, info.context.user):
            raise GraphQLError("You do not have permission to access this mutation.")

Обратите внимание: в документации (ссылка выше) аргументы для check_permissions указаны неверно. Я написал правильные аргументы в сниппете. На их github все правильно.

Подобным образом, когда вы делаете запрос, внутри вашего обычного резольвера просто сделайте следующее:

def resolve_users(cls, root, info, id=None):
    user_obj = User.objects.get(id=id)

    if not can_view(user_obj, info.context.user):
        raise GraphQLError("You shall not pass")
    
    return user_obj

Вернуться на верх