需要帮助了解环回中的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请求时,它不起作用。
此外,只是为了方便说明,我有ShippingAddresses模型的关系定义与帐户(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