DAML:授权每一方查看某个模板的合约

DAML: authorize every party to see contracts of a certain template

所以我在授权方面遇到了这个问题。我制作了一个小型投票系统,其中包含场景中给出的一定数量的演员合同(参见下面的演员模板)。我需要我在 yaml 文件中定义的每一方都能够看到这些合同。但是只有创建合同的一方才能看到它。 DAML 是围绕授权构建的,因此只有指定的人才能查看和使用合同(当事方是签字人或观察员)。但是,我将如何使所有各方都可以看到某个模板的每份合同?我不能将他们指定为观察者。是否可以定义一个模板,其中包含一个观察者列表,该列表包含所有参与方,并且我可以作为观察者转发给每个参与者合同实例?

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

所以我想通了。对于那些在未来为此苦苦挣扎的人。我对可能的解决方案的建议奏效了。我创建了一个模板 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

我认为实现这一点的惯用方法不是在 DAML 本身中对其建模。

您改为在外部身份验证系统中编写此逻辑,方法是将其连接到诸如 https://blog.daml.com/daml-driven/easy-authentication-for-your-distributed-app-with-daml-and-auth0 中所述的 auth0 之类的东西。例如,想一想您通常如何在 RDBMS 中执行此操作。你会有用户 table,他们有一个角色,一个角色可以有权限等。

然后您可以引入一个名为 ActorAccess(角色)的通用方,并使其成为 Actor 合约的观察者。然后,您配置 auth0 以向 Alice 和 Bob 授予 actAs 此方或类似的东西。

https://docs.daml.com/app-dev/authentication.html,令牌中有几个字段称为 readAsactAs,它们根据文档中的 table 实现不同的目标。

auth0 然后将发布包含这些详细信息的 JWT 令牌,您可以订阅分类帐 api 事件流并通过此模板类型观察事件,因为 Alice 和 Bob 是任何合约的利益相关者 ActorAccess派对就可以了。

不知道这是否正确,但值得一试。