Возможность получать данные только владельцев с помощью prisma2 и nexus - PullRequest
0 голосов
/ 22 февраля 2020

При публикации запроса я хочу получить только те данные, которые назначены текущему пользователю (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.

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

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

1 Ответ

0 голосов
/ 25 февраля 2020

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

, заменив

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
            }
          }
        })
      }
    });
...