Неожиданное поведение управления доступом к полю в KeystoneJS

#javascript #node.js #keystonejs

#javascript #node.js #keystonejs ( ключевые слова )

Вопрос:

Я пытаюсь применить логику доступа на уровне поля в KeystoneJS в соответствии с этими инструкциями.

Следующее скрывает поле fieldName из пользовательского интерфейса администратора:

 fieldName: {
  type: Text,
  access: {
    read: false,
    update: false,
    create: false
  },
},
 

Но поле не будет скрыто от пользовательского интерфейса администратора, если я использую императивный подход. Смотрите ниже, который, как я ожидал бы, даст тот же результат, что и описанный выше статический подход:

 fieldName: {
  type: Text,
  access: {
    read: ({ authentication: { item, listKey } }) => {
      return false;
    },
    update: ({ authentication: { item, listKey } }) => {
      return false;
    },
    create: ({ authentication: { item, listKey } }) => {
      return false;
    }
  },
},
 

Я что-то пропустил или это ошибка?

Ответ №1:

Императивный подход использует функцию, которая не может быть передана на сторону клиента.

Keystone использует true false для этого значение maybe. это означает !!(() => {}) , что становится истинным при создании метаданных пользовательского интерфейса администратора для полей в списке.

в разделе «Детализированное императивное логическое значение» есть примечание, в котором объясняется, что эти поля действительно включаются в graphql и пользовательский интерфейс, но исключаются во время выполнения.

Комментарии:

1. Спасибо за разъяснение @Gautam — я рассмотрю другие подходы. С нетерпением ждем новых обновлений пользовательского интерфейса администратора! keystonejs.com/blog/roadmap-update