gpt4 book ai didi

node.js - 需要帮助了解环回中的 ACL

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:50 24 4
gpt4 key购买 nike

我创建了一个名为“ShippingAddresses”的模型,它具有以下 ACL 规则。

[
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW",
"property": "create"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
}
]

当我通过在端点/api/shipping_addresses 上进行 POST 调用来创建记录时,它工作得很好,但是当我在同一端点/api/shipping_addresses 上发出 GET 请求时,它不起作用。

此外,仅作为旁注,我使用 Account 定义了 ShippingAddresses 模型的关系(继承 User)。关系是: User -> hasMany ShippingAddress , ShippingAddress -> 属于帐户。

我阅读了 Loopback 官方文档上的 ACL 文档,但我迷失了。一切似乎都设置正确,但仍然收到 401:需要授权。

最佳答案

问题在于READ权限,因为您仅将其设置为$owner。它的含义是:只有模型实例的所有者才能查看该实例。因此,只有当您传递与所有者(用户)相关的实例的 id 时,它才会起作用,即与 findById() 相同。

另请记住,在处理模型实例的所有权时,您必须将它们与“belongsTo”相关联。它要做的就是将 userId 添加到模型实例中,以便环回知道该模型实例属于谁。此外,它还创建新的休息端点。例如:

User.modelname.create()  //this way modelname instance is created for User.
//User is the owner of current modelname instance.

否则,如果您希望允许每个人访问 GET 休息端点,请使用以下 ACL

[
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW",
"property": "create"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
}
]

关于node.js - 需要帮助了解环回中的 ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33115349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com