Возможность получать данные только владельцев с помощью prisma2 и nexus

При отправке запроса я хочу получить только данные, назначенные текущему пользователю (id).

Я возвращаюсь и устанавливаю userId с помощью функции промежуточного программного обеспечения, которая содержит;

const userId = tokenPayload['claims']['uid'];
ctx.userId = userId;

Основываясь на userId, мне нужно отфильтровать данные из таких моделей;

model Address {
  id                   String      @id @default(uuid())
  name                 string
  ...
  user                 User
}

поэтому я хочу вернуть эквивалент Addresses.filter(address => address.user.id === ctx.userId)

(Addresses, где user.id равно значению, установленному в промежуточном программном обеспечении)

например, что-то вроде этого (это выдуманный код, поэтому он работает)

plugins: [nexusPrismaPlugin(
    {
      computedInputs: {
      ...
      },
      computedFilters: {
        addresses: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
        relations: ({ ctx }) => ({ where: { user: { id: ctx.userId } } }),
        ...
      }
    }
  )],

Где computedFilters фильтрует входящий запрос в соответствии с требованиями, установленными в операторе where. Таким образом, с этим набором он должен возвращать только adresses и / или relations, где user.id === ctx.userId.

Я надеюсь, что ясно, чего я хочу достичь, это не обязательно должно быть таким, единственное, что должно быть таким же, - это ответ наиболее эффективным способом.

Надеюсь, кто-то может помочь, последние пару недель я борюсь с текущей проблемой ..


person RMCS    schedule 22.02.2020    source источник
comment
Можно ли не использовать фильтр для пакетного чтения? См .: github.com/prisma-labs/nexus-prisma#batch-filtering и github.com/prisma-labs/nexus-prisma#filtering   -  person Josh Wulf    schedule 22.02.2020
comment
Удалось ли вам решить эту проблему? @RMCS   -  person nburk    schedule 25.02.2020


Ответы (1)


Я решил проблему, отредактировав сгенерированные резолверы;

путем замены

t.crud.addresses({filtering: true, ordering: true});

с участием

t.list.field('addresses', {
      type: 'Address',
      resolve: (_parent, _args, ctx) => {
        return ctx.prisma.address.findMany({
          where: {
            user: {
              id: ctx.userId
            }
          }
        })
      }
    });
person RMCS    schedule 25.02.2020