Keystone.js 6 доступ запрещен adminMeta

Я хочу заполнить данные onConnect, но у меня отказано в доступе, используя этот запрос:


{
        keystone: keystone {
        adminMeta {
          lists {
            key
            description
            label
            singular
            plural
            path
            fields {
              path
            }
          }
        }
      }

У меня есть эта ошибка, даже если я использую sudo, context.sudo (). graphql.raw:


[
  Error: Access denied
      at /Users/sidalitemkit/work/web/yet/wirxe/wirxe-app/node_modules/@keystone-next/admin-ui/system/dist/admin-ui.cjs.dev.js:552:19
      at processTicksAndRejections (node:internal/process/task_queues:94:5)
      at async Promise.all (index 0)
      at async Promise.all (index 0) {
    locations: [ [Object] ],
    path: [ 'keystone', 'adminMeta' ]
  }
]

вот мой конфиг:

export default auth.withAuth(
  config({
    db: {
      adapter: 'prisma_postgresql',
      url:
        'postgres://admin:aj093bf7l6jdx5hm@wirxe-app-database-do-user-9126376-0.b.db.ondigitalocean.com:25061/wirxepool?schema=public&pgbouncer=true&sslmode=require',
      onConnect: initialiseData,
    },
    ui: {
      isAccessAllowed: (context) => !!context.session?.data,
    },
    lists,
    session: withItemData(
      statelessSessions({
        maxAge: sessionMaxAge,
        secret: sessionSecret,
      }),
      { User: 'email' },
    ),
  }),
);

я понял, что когда я это сделаю:

isAccessAllowed: (context) => true

работает

любой совет здесь


person sidali    schedule 02.05.2021    source источник


Ответы (1)


context.sudo() отключил контроль доступа. с вашим запросом может быть какая-то проблема. isAccessAllowed: (context) => true относится к admin-ui, а не к внутренней реализации graphql. Это может быть ошибка, пожалуйста, откройте ошибку в репо. Они смогут исправить это быстро.

Я не вижу образца initialiseData, чтобы попробовать себя. Также graphql разработан как таковой, если вы попытаетесь получить доступ к какому-либо несуществующему элементу, тогда он может дать вам ошибку отказа в доступе, даже если нет контроля доступа (весь доступ установлен на true).

Также есть еще один api, который упрощает создание исходных элементов. Вы должны использовать новый список api, доступный как context.sudo().lists.<ListName>.createOne или createMany, например

const user = await context.sudo().lists.User.createOne({
  data: {
    name: 'Alice',
    posts: { create: [{ title: 'My first post' }] },
  },
  query: 'id name posts { id title }',
});

or

const users = await context.lists.User.createOne({
  data: [
    {
      data: {
        name: 'Alice',
        posts: [{ create: { title: 'Alices first post' } }],
      },
    },
    {
      data: {
        name: 'Bob',
        posts: [{ create: { title: 'Bobs first post' } }],
      },
    },
  ],
  query: 'id name posts { id title }',
});

для получения дополнительных сведений см. API элементов списка и API элементов базы данных в документации к предварительной версии.

person Gautam Singh    schedule 02.05.2021
comment
спасибо за подробности, я не могу использовать списки.Пользователь ... потому что я хочу получить доступ к полям схемы через запрос keystone {adminMeta ... - person sidali; 04.05.2021