Как получить запись Ref в функции предиката FaunaDB?

Я пытаюсь подготовить функцию предиката «запись». Идея состоит в том, чтобы позволить пользователю изменять только свой собственный профиль. Я сравниваю «id» из Token и записываю «Ref». По логике должно работать так:

  q.Lambda(
    ['old', 'new'],
    q.Equals(
      q.Select(["id"], q.CurrentIdentity()),
      q.Select(['ref'], q.Var('old'))
    )
  )
)

Но это не так: «Ошибка: недостаточно прав для выполнения действия». В документации по «предикатной функции»:

write, history_write: старые данные, новые данные и ссылка на документ, который нужно записать.

Я изменил функцию, но ошибка все равно появляется. Код:

q.Query(
  q.Lambda(
    ['old', 'new', 'ref'],
    q.Equals(
      q.Select(["id"], q.CurrentIdentity()),
      q.Var('ref')
    )
  )
)

Я также попытался жестко запрограммировать идентификатор пользователя для этой функции, и она хорошо работает:

q.Query(
  q.Lambda(
    ['old', 'new', 'ref'],
    q.Equals(
      q.Select(["id"], q.CurrentIdentity()),
      "295870713291604487"    
    )
  )
)

Что я делаю не так?


person yury.hrynko    schedule 06.05.2021    source источник


Ответы (1)


Попробуй это:

q.Query(
  q.Lambda(
    ['old', 'new', 'ref'],
    q.Equals(
      q.CurrentIdentity(),
      q.Var('ref')
    )
  )
)

Аналогично этому: https://github.com/Vadorequest/rwa-faunadb-reaflow-nextjs-magic/blob/main/fauna/roles/Editor.ts#L73-L81

q.Var('ref') возвращает объект Ref, а не id.

person Vadorequest    schedule 06.05.2021