Xow*_*wap 2 acl node.js strongloop loopbackjs
目前正在测试一系列框架以确定我公司未来使用的良好候选者,LoopBack几乎完美地满足了我的需求引起了我的注意.
但是,我觉得他们的ACL模型在某些情况下非常有限.让我们采用以下用例:在协作旅行管理网站上,用户可以创建和/或加入公共旅行.我们假设以下API:
/Travels 列出用户拥有的所有旅行/Travels/public 列出所有公共旅行/Travels/{id}/join 使用给定的ID加入Travel构建这样的API是否需要重新发明轮子?还是要实现一些中间件?
每个字段的ACL也是如此.假设您有一些清单项目,一些是手动添加的,另一些是自动生成的.除了更改"完成"字段外,您能否仅在自动阻止WRITE操作?
默认情况下,请求
GET /Travels
Run Code Online (Sandbox Code Playgroud)
将列出Travel模型的每个元素.如果你设置了适当的关系(可能是用户和旅行之间的多对多关系),查询给定用户旅行的正确方法是
GET /Users/{id}/Travels
Run Code Online (Sandbox Code Playgroud)
但是您可以自定义Travels.find()使用钩子,范围甚至重载方法原型的默认行为.
关于/Travels/public那是微不足道的,你只需要创建一个远程方法.使用该path属性自定义端点.
最后,加入带有请求的旅行/Travels/{id}/join也将使用远程方法进行管理,但这应该是一个POST请求.
Loopback能够在不指定关系表的情况下管理多对多关系,但在您的情况下,我宁愿定义它.例如
{
"name": "UserTravel",
"options": { ... },
"properties": {
"id":{"type":"Number", "id":1},
"userId":{"type":"Number"},
"travelId":{"type":"Number"}
},
"relations": {
"Travel": {
"type": "belongsTo",
"model": "Travel",
"foreignKey": "travelId"
},
"User": {
"type": "belongsTo",
"model": "User",
"foreignKey": "userId"
}
}
}
Run Code Online (Sandbox Code Playgroud)
拥有此模型将允许您在调用join端点时插入特定的用户/旅行元组.您从请求参数获取travelId,并从请求accessToken,userId获取用户在您的应用程序中进行身份验证.
| 归档时间: |
|
| 查看次数: |
1870 次 |
| 最近记录: |