2015-04-14 36 views
0

出於某種原因,我無法獲得流星教程的第11步的最後部分工作。該步驟的網址如下:https://www.meteor.com/try/11流星的教程步驟11

對我來說不工作的部分是最後一步:「爲了完成我們的私人任務功能,我們需要將檢查添加到我們的deleteTask和setChecked方法中以確保只有任務所有者可以刪除或檢查一個私人任務:「

當我將代碼添加到deleteTask和setChecked方法時,其他瀏覽器中的用戶仍然可以刪除並檢查/取消選中不同用戶的任務。

這是我的DeleteTask活動和setChecked功能樣子使修改後。也許我做錯了什麼?

deleteTask: function (taskId) { 
    var task = Tasks.findOne(taskId); 
    if (task.private && task.owner !== Meteor.userId()) { 
     // If the task is private, make sure only the owner can delete it 
     throw new Meteor.Error("not-authorized"); 
    } 
    Tasks.remove(taskId); 
}, 
setChecked: function (taskId, setChecked) { 
    var task = Tasks.findOne(taskId); 
    if (task.private && task.owner !== Meteor.userId()) { 
     // If the task is private, make sure only the owner can check it off 
     throw new Meteor.Error("not-authorized"); 
    } 
    Tasks.update(taskId, { $set: { checked: setChecked} }); 
}, 

有什麼想法?

+0

嗯,我忘了在每個教程步​​驟的底部的代碼示例。當我打開它們時,這些方法與我的相同。難住了。 – alfreema

回答

1

您在步驟11中實施的代碼可防止其他用戶檢查/取消選中其他用戶的私人任務

從代碼:

// If the task is **private**, make sure only the owner can delete it 

用戶仍然可以選中/取消不同用戶的任務,如果他們是公共

退房thiswill.meteor.com爲哪些用戶可以和不可以當應用程序完成與做榜樣。

+0

賓果!現在我懂了。 :)我希望他們的教程不會讓它只是私人的 - 這樣我們可以看到這一步工作(私人從非所有者中刪除)。很明顯,現在你已經解釋了它,我可以修改它來消除私人需求,但我認爲如果它是我期待的方式,它會更具教育意義。 – alfreema

+0

:)。如果你沒有做第11步,那麼人們將能夠使用JavaScript控制檯並刪除其他人的私人待辦事項。 我認爲他們的目標是向您展示如何爲用戶提供正確的視圖並編輯他們自己的私人數據。 隨着一點點黑客攻擊,我相信你可以把'私人任務'變成'鎖定任務'。那會有你想看到的行爲。 :) – Will

+0

嗯,我不會改變任何關於第11步,除非使它成爲複選框和刪除不可用的地方,除非你擁有它們。當你處理安全問題時,這是更自然的期望。事情的發展方向是,當某人使其成爲「私人」時,它會完全消失在另一個人的屏幕上 - 因此無法測試他們試圖演示的功能(這是安全性)。 – alfreema

0

由於alfreema說,如何防止其他用戶刪除的公共任務。

deleteTask: function (taskId) { 
    // Inside the deleteTask method 
    var task = Tasks.findOne(taskId); 
    if (task.public && task.owner !== Meteor.userId()) { 
     // If the task is public, make sure only the owner can delete it 
     throw new Meteor.Error("not-authorized"); 
    } 
    Tasks.remove(taskId); 
}, 

setChecked: function (taskId, setChecked) { 
    var task = Tasks.findOne(taskId); 
    if (task.public && task.owner !== Meteor.userId()) { 
     // If the task is public, make sure only the owner can check it off 
     throw new Meteor.Error("not-authorized"); 
    } 
    Tasks.update(taskId, { $set: { checked: setChecked} }); 
} 

雖然如上所述更新代碼,但將task.private替換爲task.public,而它仍允許刪除任務。