Hyperledger-Composer:条件类型为 (r.someArray.indexOf(p.getIdentifier()) > -1) 的 ACL 规则不起作用
Hyperledger-Composer: ACL-rules with condition of type (r.someArray.indexOf(p.getIdentifier()) > -1) not working
在我的 hyperledger-composer 应用程序中,访问控制规则具有以下类型的条件:
(r.someArray.indexOf(p.getIdentifier()) > -1)
不工作。
下面是此类 ACL 规则的示例:
rule SuperiorsHaveReadAccessToTheirTeamMembers {
description: "Allow superiors read access to data on their team members"
participant(p): "org.comp.app.Employee"
operation: READ
resource(r): "org.comp.app.Employee"
condition: (r.superiors.indexOf(p.getIdentifier()) > -1)
action: ALLOW
}
澄清:
participant Employee extends User {
o String company optional
--> Employee[] superiors optional
}
所以上面的访问控制规则简单地说明当且仅当员工 B 的数组属性 "superiors" 包含员工 A(即如果员工 A 是员工 B 的上级)时,员工 A 对员工 B 具有读访问权限).
然而,它不起作用。员工 A 没有员工 B 的读取权限。所有其他此类访问控制规则也不起作用。
这是 hyperledger-composer 中的错误吗?
不,这不是错误。这又是因为您正在使用一组资源对象,就像您对其建模一样。 indexOf
适用于字符串对象。它对我有用如下:
rule SuperiorsHaveReadAccessToTheirTeamMembers {
description: "Allow superiors read access to data on their team members"
participant(p): "org.comp.app.Employee"
operation: READ
resource(r): "org.comp.app.Employee"
condition: (r.authorized && r.authorized.toString().indexOf(p.getIdentifier()) > -1)
action: ALLOW
}
此外,请记住 indexOf
的工作原理:它会在第一场比赛中 'pass'。最好有一个 authorized
字段,并将缩短的(字符串)ID 存储在(比如)一个字段中,例如。 String[] authorized optional
- 在这种情况下,您的原始规则将首次生效。
在我的 hyperledger-composer 应用程序中,访问控制规则具有以下类型的条件:
(r.someArray.indexOf(p.getIdentifier()) > -1)
不工作。
下面是此类 ACL 规则的示例:
rule SuperiorsHaveReadAccessToTheirTeamMembers {
description: "Allow superiors read access to data on their team members"
participant(p): "org.comp.app.Employee"
operation: READ
resource(r): "org.comp.app.Employee"
condition: (r.superiors.indexOf(p.getIdentifier()) > -1)
action: ALLOW
}
澄清:
participant Employee extends User {
o String company optional
--> Employee[] superiors optional
}
所以上面的访问控制规则简单地说明当且仅当员工 B 的数组属性 "superiors" 包含员工 A(即如果员工 A 是员工 B 的上级)时,员工 A 对员工 B 具有读访问权限).
然而,它不起作用。员工 A 没有员工 B 的读取权限。所有其他此类访问控制规则也不起作用。
这是 hyperledger-composer 中的错误吗?
不,这不是错误。这又是因为您正在使用一组资源对象,就像您对其建模一样。 indexOf
适用于字符串对象。它对我有用如下:
rule SuperiorsHaveReadAccessToTheirTeamMembers {
description: "Allow superiors read access to data on their team members"
participant(p): "org.comp.app.Employee"
operation: READ
resource(r): "org.comp.app.Employee"
condition: (r.authorized && r.authorized.toString().indexOf(p.getIdentifier()) > -1)
action: ALLOW
}
此外,请记住 indexOf
的工作原理:它会在第一场比赛中 'pass'。最好有一个 authorized
字段,并将缩短的(字符串)ID 存储在(比如)一个字段中,例如。 String[] authorized optional
- 在这种情况下,您的原始规则将首次生效。