如何在 Sails.js 中保护蓝图访问

How to secure blueprint access in Sails.js

所以我对 Sails.js 很陌生,但它似乎给 table 带来了很多,比如这些蓝图,

现在我有 2 个模型,Accounts / Friends

它正在使用关联,因为 Accounts 有很多 Friends

在我的客户端,我有一种方法可以向用户发送通知,其中一种是好友请求,这样效果很好,它让用户可以选择接受或拒绝邀请

代码如下:

socket.on('accounts', function(data) {
    if (data.verb === "addedTo" && data.attribute === "notifications") {
      socket.get('/notifications/' + data.addedId, function(note) {
        console.log(note);
        if (!$.isEmptyObject(note)) {
          $scope.notifications.push({
            'text': note.from_name + ' sent you a friends request',
            'id':   note.id,
            'type': note.type,
            'from_id': note.from_id
          })
          $.notify('You have a new notification', 'info');
          $scope.$digest();
        }
      })
    }
  })

$scope.accept = function(notificationId, fromId) {

}

当人们按下“接受”按钮时,我想为接受通知的人和发送通知的人添加好友,这样他们就可以相互成为好友。

我可以简单地通过创建一个数据对象并为他们两个的朋友做 socket.post,然后做一个 socket.put 来更新正在读取的通知并处理它

唯一的问题是,我不希望人们进来并打开 JS 控制台和垃圾邮件 socket.post 向人们恶意发送百万朋友

var obj {
  'friend_name': 'Bill',
  'online': 1
}

socket.post('/accounts/1/friends', obj);

那么,我该如何保护它,以便访问 post/accounts/1/friends 的人只是应该访问它的人?

如果我不明白就问吧。谢谢!

垃圾邮件示例:

有人打开 JS 控制台然后去

var obj = { friend_name: 'bill', owner: 1 }; io.socket.post('/friends', obj);

现在 500 次 id 1 的帐户有 500 个名为 bill

的朋友

如果我误解了什么,请纠正我,但我认为你的逻辑是错误的。

我假设Bill也是一个账户,但是当你只添加他的名字时,你与他的账户信息没有任何联系,也只能通过名字来识别他。为了进行某种验证,您需要 Bill 的唯一标识符。您可以添加 account_idowner.

而不是名称

所以如果有 3 个帐户:

  1. 克里斯
  2. 比尔

您将添加 var obj = { account_id: 2, owner: 1 };

这样您就可以在添加新朋友之前使用 policies 检查 account_id 和所有者的朋友是否已经存在。如果您对如何使用政策有任何疑问,请直接提问。

无论如何,我认为更好的方法是只有一个模型,并且只与该模型建立 many to many 关系。帐户将通过 Sails 将创建的第三个 table(将是您的朋友 table)与自身建立多对多关系。这样,在新的 table 中,您将有两列包含帐户 ID。如果假设第一行的 ID 为 1 和 2,这意味着 Chris 和 Bill 都是朋友,您可以想出一些逻辑来确保行始终是唯一的,这样您就不会遇到垃圾邮件问题。郑重声明,我没有与一个模型建立多对多关系,因此您必须弄清楚它是如何完成的。