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,令牌中有几个字段称为 readAs
,actAs
,它们根据文档中的 table 实现不同的目标。
auth0 然后将发布包含这些详细信息的 JWT 令牌,您可以订阅分类帐 api 事件流并通过此模板类型观察事件,因为 Alice 和 Bob 是任何合约的利益相关者 ActorAccess
派对就可以了。
不知道这是否正确,但值得一试。
所以我在授权方面遇到了这个问题。我制作了一个小型投票系统,其中包含场景中给出的一定数量的演员合同(参见下面的演员模板)。我需要我在 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,令牌中有几个字段称为 readAs
,actAs
,它们根据文档中的 table 实现不同的目标。
auth0 然后将发布包含这些详细信息的 JWT 令牌,您可以订阅分类帐 api 事件流并通过此模板类型观察事件,因为 Alice 和 Bob 是任何合约的利益相关者 ActorAccess
派对就可以了。
不知道这是否正确,但值得一试。