首页 > 解决方案 > Keystone.js 6 访问被拒绝 adminMeta

问题描述

我想在Connect上播种数据,但我拒绝访问,使用此查询:


{
        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

它正在工作

这里有任何建议

标签: keystonejs

解决方案


context.sudo()禁用访问控制。您的查询可能存在一些问题。isAccessAllowed: (context) => true与 admin-ui 相关,与 graphql 的后端实现无关。这可能是一个错误,请在 repo 中打开一个错误。他们应该能够快速修复它。

我没有看到样品initialiseData来尝试自己。此外,如果您尝试访问一些不存在的项目,那么 graphql 的设计也是如此,即使没有访问控制(所有访问权限设置为true),它也可能会给您拒绝访问错误。

还有另一个 api 更容易创建初始项目。您应该使用新的列表 api,可以这样context.sudo().lists.<ListName>.createOnecreateMany像这样使用

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

或者

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 }',
});

有关更多详细信息,请参阅其预览文档中的List Items APIDatabase Items API


推荐阅读