部署:获取登录用户创建的特定集合中的所有对象的最安全、最优雅的方式



我认为标题几乎说明了一切。。。Deployd是全新的,因此任何关于如何最好地实现这一点的建议都将受到赞赏。

获取用户创建的集合中的对象(我假设您使用的是javascript库dpd.js):

// Get the current user:
var currentUser;
dpd.users.me(function(result, error) {
    currentUser = result;
});
// query your collection with your currentUser id as parameter
dpd.yourcollection.get({creator:currentUser.id}, function(result) {
    // Do something with the result
    console.log(result);
});

您的集合应该具有一个属性"creator",该属性包含创建对象(*)的用户的id。然后,为了保护您的后端,请转到集合的ON_GET选项卡中的仪表板,并使用以下代码进行保护:

 cancelUnless(isMe(this.creator), "You have to be the creator to view this item", 401);

有关cancellUnless()和isMe()的更多信息,请点击此处:http://docs.deployd.com/docs/collections/reference/event-api.md#s-取消如果%28%29,%20取消除非%28%29-764

保护您的收藏的好做法是只在用户登录时允许查询:

cancelUnless(me,"You have to be connected to view this item", 401);

用户集合应该特别安全(只允许管理员或类似人员使用ON_PUT)。

*:要将currentUserId自动存储在创建者属性中,您也可以将其添加到面板中的ON_POST事件中:

this.creator = me.id;

更多信息请点击此处:http://docs.deployd.com/docs/collections/reference/event-api.md#s-me-764

从0.8.9版本开始,事件ONBEFOREQUEST存在,您可以将此代码放入其中:

cancelUnless(me);
query.creator = me.id;

这意味着,对于发送到该端点的每个请求,创建者密钥都将被查询为具有当前登录用户的id。如果没有当前登录用户,则该请求将被取消。

最新更新