所以我在授权时遇到了这个问题。我制作了一个小型投票系统,其中包含场景中给定的参与者合同数量(请参见下面的参与者模板)。我需要在yaml文件中定义的每一方都可以查看这些合同。但是,只有创建合同的一方才能看到它。 DAML是围绕授权构建的,因此只有指定的人才能查看和使用合同(当事方是签署方还是观察员)。但是,我该如何使各方都能看到某个模板的每个合同?我不能将它们指定为观察者。是否可以定义一个包含观察者列表的模板,该模板已输入所有相关方,并且我可以作为观察者转发给每个参与者合同实例?
template Actor
with
created_by : Party
username : Text
name : Text
email : Text
bankIban : Text
role : Text
where
signatory created_by
答案 0 :(得分:1)
我认为实现此目标的惯用方法不是在DAML本身中对其进行建模。
您可以通过将其挂接到https://blog.daml.com/daml-driven/easy-authentication-for-your-distributed-app-with-daml-and-auth0中所述的auth0之类的代码中,从而在外部auth系统中将此逻辑编码。例如,想想您通常如何在RDBMS中做到这一点。您将拥有用户表,他们具有角色,角色可以具有权限等。
然后,您可以引入一个名为ActorAccess
(角色)的通用方,并使其成为Actor
合同的观察者。然后,您将auth0配置为向actAs
这个方或类似方授予Alice和Bob这样的授权。
https://docs.daml.com/app-dev/authentication.html,在令牌中有几个字段,称为readAs
,actAs
,这些字段根据文档中的表格实现了不同的目标。
auth0将发布具有这些详细信息的JWT令牌,并且现在爱丽丝和鲍勃是任何具有ActorAccess
合同方的利益相关者,您可以订阅分类帐api事件流并通过此模板类型观察事件。
不知道这是否正确,但值得一试。
答案 1 :(得分:0)
所以我想通了。对于那些日后为此奋斗的人。我对可能的解决方案的建议奏效了。我创建了一个模板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