Size: a a a

GraphQL — русскоговорящее сообщество

2021 September 15

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
@apollo/client содержит в себе хуки и всё необходимое, так что думаю что неактуальные
источник

AK

Alexandr K in GraphQL — русскоговорящее сообщество
спасибо)
источник

S

Shieldy in GraphQL — русскоговорящее сообщество
@neemsigo, пожалуйста, нажмите на кнопку ниже в течение указанного времени, иначе вы будете кикнуты. Спасибо! (60 сек)
При поддержке 1inch Network (iOS)
источник

А

Андрей in GraphQL — русскоговорящее сообщество
всем привет, есть интересный (для меня так точно) вопрос
стек бека - нода и аполло сервер

Задача: Есть мутация updateName, нужно сделать так чтобы менять имя мог пользователь только себе. У меня есть разделение прав на ЮЗЕР и ГОСТЬ. но как сделать чтобы мог менять имя сам себе и только, пока не знаю. Вижу только способ как делать внутри резольвера проверку на расшифрованный токен и на те поля что хочет изменить (чтото вроде уникальное поле токена = уникальному полю из бд) - но я думаю так криво.

Буду рад помощи и подсказкам
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
В контексте делай проверку на валидность токена и если он валиден то в контекст запихивай объект юзера, а в резолверах берешь контекст, берёшь оттуда юзера, смотришь его роль и нужные поля и разрешаешь или запрещаешь изменения, через час скину примеры кода как я делаю. Или сейчас можешь сам глянуть тут (тут чуть что пример с сессиями, не jwt)
https://github.com/uxname/liteend
источник

А

Андрей in GraphQL — русскоговорящее сообщество
то есть в каждом резольвере надо делать проверку?
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
Ну есть ещё варианты типа graphql shield, но я там сходу не подскажу как лучше
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Я делал с помощью директив. Один и тот же резолвер как для юзера для изменения своих данных. Так и для админа. Ну и в целом роли массивом рядом с мутацией в схеме прописывались
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
А как делали когда надо разрешить не по роли а себе и конкретно вон тому акку? Или не допускали такого прост?
источник

А

Андрей in GraphQL — русскоговорящее сообщество
А можно подробней пожалуйста ?
источник

А

Андрей in GraphQL — русскоговорящее сообщество
Тоже гуглил его, но решил спросить вас. Сам не знаю как лучше
источник

А

Андрей in GraphQL — русскоговорящее сообщество
А ваш первый вариант, в каждом резольвенте писать. Это норм? Сам подход
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
Ну, мне пока норм, глобальнее не могу сказать, сам в пассивном поиске идеального варианта :)
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Такого не было, но была возможность навесить несколько директив.
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Это не норм. Дублирование логики дикое. Для тех кто в дебри директив не хочет лезть -shield отличное решение.
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Для меня директивы ещё хорошо тем, что у меня схема jit компилируется. Директивы тоже начинают работать на порядок быстрее как и вся схема. А shield это мидл вара поверх всего (директива тоже мидлвара по сути, только в рамках gql), соответсвенно производительность просядет
источник

𝘂

𝘂𝘅𝗻𝗮𝗺𝗲... in GraphQL — русскоговорящее сообщество
ну чтобы дублирования не было можно в отдельную функцию выделить проверки. Просто это выходит те же самые директивы, только чутка проще
источник

А

Андрей in GraphQL — русскоговорящее сообщество
А можно пример, говорили скинете)
источник

А

Андрей in GraphQL — русскоговорящее сообщество
Ну вот я тоже так думал, в функцию вынести, а в резольвентах вызывать просто
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Да, конечно. Просто я сделал условно 3 директивы: auth, group[], isAuthor - для полей. Они обычно закрывали 90% потребностей. Но что-то сложное всегда отдельно пилится
источник