需要帮助了解环回中的ACL

我创build了一个名为“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" } ] 

当我通过在endpoint / api / shipping_addresses上进行POST调用来创buildlogging时,它工作得很好,但是当我在同一个endpoint / api / shipping_addresses上进行GET请求时,它不起作用。

此外,只是为了方便说明,我有S​​hippingAddresses模型的关系定义与帐户(inheritance用户)。 关系是:用户 – > hasMany ShippingAddress,ShippingAddress – > belongsTo帐户。

我阅读关于Loopback官方文档的ACL文档,但我迷路了。 一切似乎设置正确,但仍401:授权要求。

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

另外请记住,在使用所有权来模拟实例时,您必须将它们与“belongsTo”关联起来。 它将要做的是将userId添加到模型实例,以便回送知道模型实例属于谁。 此外,它还创build新的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开发有用。 看到你的问题会正确地为模型创build将会改变angular色。 首先引用环回的身份validation和自动注册

将为models / script.js添加编码https://github.com/strongloop/loopback-example-access-control/blob/master/common/models/project.js