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

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 17 апреля 2018 г.

04:47:12 ДП
User 164559967
Ребят всем привет. Столкнулся с такой задачей. попробую кратко изложить.
Возможно ли передача тех или иных схем и ресолверов в зависимости от роли пользователя (который получаю из request в graphqlExpress)?
04:47:19 ДП
User 164559967
Например есть схемы(с ресолверами) A B C D. Есть покупатель и продавец (определяю его на при запуске graphqlExpress). Теперь когда заходит покупатель, ему должна быть доступна только схема A и В, а если продавец, то А, C, D. Вся проблема в том, что когда я запускаю graphqlExpress и заходит покупатель. то подгружается схема A B. а когда заходит продавец, то схема не обновляется, т.к. graphqlExpress подгрузить новые схемы только после перезагрузки. В общем я пришел в выводу что генерить схемы ВНУТРИ graphqlExpress - это неправильно. его нужно передавать еще до запуска сервера. Но определить роль пользователя я могу только после запуска. Подскажите как решить эту задачу
09:12:17 ДП
User 164559967
В общем замучился как это делать. Единственное решение - использование директивов. Вот здесь хороший пример: https://launchpad.graphql.com/nxp1870jl7
launchpad.graphql.com/nxp1870jl7
View this code sample on Launchpad, the GraphQL server playground.
09:21:15 ДП
User 164559967
Правда теперь проблема с ресолверами. Например: когда покупатель запрашивает query goods:
Query: {
 goods(obj, args, context) {
  return GoodsCollection.find({buyerId: context.userId}).fetch()
 }
}а когда должен запрашивать продавец
Query: {
 goods(obj, args, context) {
  return GoodsCollection.find({sellerId: context.userId}).fetch()
 }
}Но т.к. я вынужден мерджить ресолверы до запуска сервера приходится писать типа:
Query: {
 goods(obj, args, context) {
  if (context.role == "buyer") {
   return GoodsCollection.find({buyerId: context.userId}).fetch() 
  } else {
   return GoodsCollection.find({sellerId: context.userId}).fetch()
  }
  
 }
}
12:24:52 ПП
User 224769697
Madi Sheriyev а не подходит вариант просто возвращать ошибку с гиафкуэль сервера если нет доступа у какой то роли?
12:25:27 ПП
User 224769697
Зачем прям схемы разные делать?
12:36:50 ПП
User 164559967
Вот как раз буду реализовать это через директивы. Просто я вообще хотел исключить подгрузку схем и ресолверов которые недоступны для определенной роли.
12:37:43 ПП
User 224769697
На клиенте? А зачем?
12:39:59 ПП
User 164559967
Ну чтобы роль А не смог запустить Мутейшн который может запустить только роль B
12:40:31 ПП
User 164559967
ну и доку генерить тоже было бы удобно для каждой роли
12:42:00 ПП
User 224769697
Просто я собирался тоже самое делать, но решать внутри ресолверов, в контексте запросов есть роли пользователя, и если у этих ролей нет доступа то возвращать ошибку
12:42:21 ПП
User 224769697
Так многие делали в методах meteor.js
12:42:50 ПП
User 224769697
Но если с директивами будет удобнее - круто, тоже посмотрю на это решение)
12:44:05 ПП
User 164559967
Директивы - эта крутая штука. там можно пермишины прям в схемах прописывать по ролям и тд
12:45:47 ПП
User 164559967
@dreamniker Ты сталкивался с проблемой которую я описывал про ресолверы?
12:46:39 ПП
User 164559967
когда название Query одинаковый но в зависимости от роли нужно длеать разные запросы к базе?
12:47:14 ПП
12:47:52 ПП
User 164559967
Эта проблема решилась бы если схему можно было генерить схему внутри graphqlExpress в зависимости от роли
12:48:56 ПП
User 164559967
увы у меня это не получилось, но я терь понял что это невозможно :)
02:11:02 ПП
User 89706347
User 228403837
на самом деле мне дико не нравится реализация graphql на запись
поэтому лучше его юзать как рид модел в CQRS, кек
02:11:28 ПП
User 89706347
ой, некропост получился, сорян
02:19:42 ПП
User 147656592
господа, у вас мдн работает?
02:19:57 ПП
User 147656592
или уже все так и так через впн сидят?
02:20:13 ПП
User 478207156
User 147656592
господа, у вас мдн работает?
нет и слак тоже
02:20:31 ПП
User 147656592
слак, кстати, пашет
02:20:37 ПП
User 147656592
у меня по крайней мере
03:00:59 ПП
User 321317845
*пока ещё
03:01:03 ПП
04:01:19 ПП
User 224769697
а такой вопрос не по теме:
мешать require и import на сервере это же не комильфо ?)
и что лучше использовать на сервере ?)
почти везде примеры серверного кода с require, и немного надоедает переименовывать на import )
04:02:47 ПП
User 55289203
User 224769697
а такой вопрос не по теме:
мешать require и import на сервере это же не комильфо ?)
и что лучше использовать на сервере ?)
почти везде примеры серверного кода с require, и немного надоедает переименовывать на import )
Лучше import
04:02:56 ПП
User 224769697
а почему?)
04:02:56 ПП
User 55289203
Почему - just google it
04:03:02 ПП
04:03:07 ПП
User 55289203
первая ссылка в гугле
04:05:33 ПП
User 224769697
несколько ссылок посмотрел уже, нигде конкретно не написано что импорт лучше :С
может я как то не так ищу ?)
04:06:00 ПП
User 224769697
по какому запросу первая ссылка в гугле указывает что импорты лучше ?)
04:06:25 ПП
User 55289203
import vs require
04:06:45 ПП
User 261885262
User 224769697
по какому запросу первая ссылка в гугле указывает что импорты лучше ?)
По какому запросу и с какой метадатой)
04:06:46 ПП
User 224769697
https://stackoverflow.com/questions/31354559/using-node-js-require-vs-es6-import-export
stackoverflow.com/questions/31354559/using-node-js-require-vs-es6-import-export
In a project I'm collaborating on, we have two choices on which module system we can use: Importing modules using require, and exporting using module.exports and exports.foo. Importing modules usi...
04:06:58 ПП
User 55289203
User 224769697
https://stackoverflow.com/questions/31354559/using-node-js-require-vs-es6-import-export
stackoverflow.com/questions/31354559/using-node-js-require-vs-es6-import-export
In a project I'm collaborating on, we have two choices on which module system we can use: Importing modules using require, and exporting using module.exports and exports.foo. Importing modules usi...
Да-да
04:07:17 ПП
User 224769697
эту ссылку я и смотрел, но не заметил чтобы где то написали что импорты лучше :С
04:07:22 ПП
User 224769697
надо учиться читать внимательнее))
04:07:28 ПП
User 55289203
В каждом ответе
04:07:50 ПП
User 55289203
импорт - стандарт.
04:10:03 ПП
User 224769697
@MikalaiR спасибо, почитал внимательнее, да, импорты лучше ))