DAML: разрешить каждой стороне просматривать контракты определенного шаблона - PullRequest
0 голосов
/ 08 марта 2020

Итак, я получил эту проблему с авторизацией. Я сделал небольшую систему голосования, которая содержит количество контрактов с актерами, которые приведены в сценарии (см. Шаблон актера ниже). Мне нужно, чтобы каждая сторона, которую я определил в своем файле yaml, могла видеть эти контракты. Однако только сторона, создавшая договор, может его увидеть. DAML построен на основе авторизации, поэтому только те, кто указан, могут видеть и использовать контракт (сторона подписывает или является наблюдателем). Но тогда как мне сделать каждый контракт определенного шаблона видимым для всех сторон? Я не могу указать их в качестве наблюдателя. Возможно ли определить шаблон, содержащий список наблюдателей, в который введены все стороны, и я могу переслать каждому экземпляру контракта актера в качестве наблюдателя?

template Actor
  with 
    created_by  : Party
    username    : Text
    name        : Text
    email       : Text
    bankIban    : Text
    role        : Text
  where 
    signatory created_by

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Я думаю, что идиоматический c способ добиться этого - не моделировать его внутри самого DAML.

Вместо этого вы кодифицируете этот лог c во внешней системе аутентификации, подключив его к чему-то вроде auth0, как описано в https://blog.daml.com/daml-driven/easy-authentication-for-your-distributed-app-with-daml-and-auth0. Например, подумайте, как вы обычно делаете это в RDBMS. У вас есть таблица пользователей, у них есть роль, у роли могут быть права доступа и т. Д. c.

Затем вы можете представить генерическую группу c с именем ActorAccess (роль) и сделать ее наблюдателем по контракту Actor. Затем вы настраиваете auth0 для предоставления Алисе и Бобу этого гранта actAs этой партии или что-то в этом роде.

https://docs.daml.com/app-dev/authentication.html, имеет пару полей в токене, называемых readAs, actAs, которые достигают различных целей на основе таблицы в документации.

Затем auth0 выдаст токен JWT с этими подробностями, и вы можете подписаться на поток событий API бухгалтерской книги и наблюдать за событиями по этому типу шаблона теперь, когда Алиса и Боб являются заинтересованными сторонами любых контрактов, в которых участвует ActorAccess сторона.

Не знаю, если это правильно, но стоит go.

0 голосов
/ 08 марта 2020

Так что я понял это. Для тех, кто борется с этим в будущем. Мое предложение для возможного решения сработало. Я создал шаблон Observer, в который я ввел стороны в сценарии. Затем я создал еще один шаблон с именем Create_actor, позволяющий создать шаблон Actor с возможностью ввода шаблона наблюдателя в виде типа данных и обращения к наблюдателю:

template Observers
  with 
    superuser : Party
    observers : Set Party
  where 
    signatory superuser

template Create_Actor
  with 
    current_login  : Party
    username    : Text
    name        : Text
    email       : Text
    bankIban    : Text
    role        : Text
    observers_list_id : ContractId Observers
  where 
    signatory current_login
    choice Load_all_actor_observers : ContractId Actor 
      controller current_login
      do
        observers_list <- fetch observers_list_id
        create Actor with created_by = current_login; username = username; name = name; email = email; observers_list_id = observers_list_id; observers = observers_list.observers, bankIban = bankIban; role = role

template Actor
  with 
    created_by  : Party
    username    : Text
    name        : Text
    email       : Text
    bankIban    : Text
    role        : Text
    observers_list_id : ContractId Observers
    observers   : Set Party
  where 
    signatory created_by
    observer observers
...