Контроль доступа Фильтрация запроса перед его отправкой на сервер / БД Prisma

Щас пользуюсь accesscontrol управлять ACL, и он отлично работает. Это выглядит примерно так:

const methods = {
  async update(parent, { data }, ctx, info) {
    const acUpdate = ac.can('role').updateOwn('model')
    if (! acUpdate.granted) throw new ACError()

    const filtered = acUpdate.filter({ ...data })
    return await ctx.db.mutation.updateOrganization({
      data: filtered,
      where: { id }
    }, info)
  }
}

Однако на Query Метод из GraphQL Я не знаю, как фильтровать запросы к БД. Например, для вложенного запроса это может выглядеть так:

{
  model {
    id
    name
    user {
      id
      name
      pictures {
        id 
        name
      }
    }
  }
}

Таким образом, в резольвере он будет проверять, имеют ли они доступ к модели, а затем отправляет запрос на сервер Prisma без фильтрации схемы GQL. В этом сценарии предположим, что пользователь имеет доступ к модели чтения, но не пользователь. В идеале я хотел бы сделать permission.filter(...) на фактической схеме запроса (информация?) перед отправкой в ​​Prisma. Кто-нибудь из вас решил это? Конечно, можно отфильтровать запрос после его разрешения, но этот уровень вычислений не является необходимым и может вызвать проблемы при злоупотреблении.

1 ответ

У меня была точно такая же проблема, и теперь я решаю ее, используя клиент prisma для выполнения запросов к prisma. Клиент Prisma каждый раз запрашивает только один уровень, так что вы получаете полный контроль над распознавателями и во вложенных запросах. См. /questions/16595982/bezopasnost-na-urovne-strok-s-ispolzovaniem-prisma-i-postgres/16596000#16596000

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

https://github.com/maticzav/graphql-shield/issues/113

Я думаю, что вторая часть моего ответа касается вас больше всего. Я надеюсь, что вы найдете это полезным!

Другие вопросы по тегам