Node.js 需要帮助了解环回中的ACL吗
我创建了一个名为“ShippingAddresses”的模型,它具有以下ACL规则Node.js 需要帮助了解环回中的ACL吗,node.js,loopbackjs,strongloop,Node.js,Loopbackjs,Strongloop,我创建了一个名为“ShippingAddresses”的模型,它具有以下ACL规则 [ { "accessType": "*", "principalType": "ROLE", "principalId": "$everyone", "permission": "DENY" }, { "accessType": "READ", "principalType": "ROLE", "prin
[
{
"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_地址进行POST调用来创建记录时,它工作得非常好,但当我对同一端点/api/shipping_地址发出GET请求时,它不工作
另外,为了补充说明,我已经定义了ShippingAddresses模型与Account(inherits User)的关系。关系是:用户->有多个ShippingAddress,ShippingAddress->属于帐户
我阅读了关于回送官方文档的ACL文档,但我迷路了。一切似乎都设置正确,但仍然需要401:授权。问题在于将权限设置为仅$owner时的读取权限。它的意思是:只有模型实例的所有者才能查看该实例。因此,只有当您为与所有者(用户)相关的实例传递id时,它才会起作用,即与findById()相同。 还要记住,在使用模型实例的所有权时,必须将它们与“belongsTo”关联起来。它将要做的是向模型实例添加userId,以便环回知道该模型实例属于谁。此外,它还创建了新的rest端点。例如:
User.modelname.create() //this way modelname instance is created for User.
//User is the owner of current modelname instance.
否则,如果希望允许所有人访问GETrest端点,请使用以下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"
}
]
ACL是环回框架的一个特性。 与其他框架相比,它对nodejs开发非常有用。 请参阅您的问题将正确创建,因为模型将更改角色。 首先,您提到了环回的身份验证和身份验证 将为models/script.js添加编码
环回ACL毁了我半天的时间 我的问题是另一个问题(关于错误的角色映射数据),但我认为使其工作的过程是相同的 我的解决方案:
DEBUG=loopback:security:
-->(在控制台中)Lb告诉我它无法获取角色映射string
,而不是mongo的ObjectID
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "READ",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
上述配置表明$owner ALLOW READ
优先于$everybody DENY*
如果设置了DEBUG,我可以看到如下内容:
loopback:security:acl with score: 7495 +0ms
因此,7495
是每个配置的分数,将选择最大的分数
但是当我在相同的端点/api/shipping\u地址上发出GET请求时
它不起作用了
肯定是因为当前用户不是$owner