[英]How to secure blueprint access in Sails.js
因此,我對Sails.js並不陌生,但似乎像這些藍圖一樣帶來了很多好處,
現在我有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_id
和owner
。
因此,如果有3個帳戶:
您將添加var obj = { account_id: 2, owner: 1 };
這樣,您可以在添加新朋友之前,通過策略檢查是否存在具有account_id和擁有者的朋友。 如果您對如何使用政策有任何疑問,請詢問。
無論如何,我認為更好的方法將是僅具有一個模型,並且僅與該模型建立多對多關系。 帳戶將通過Sails創建的第三個表(將成為您的Friends表)與其自身建立多對多關系。 這樣,在新表中將有兩列包含帳戶ID。 如果在第一行中假設您的ID為1和2,這意味着Chris和Bill都是朋友,那么您可以考慮一些邏輯以確保行始終是唯一的,這樣您就不會遇到垃圾郵件問題。 僅出於記錄目的,我沒有與一種模型建立多對多關系,因此您必須弄清楚它是如何完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.