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