流星的教程步骤11

时间:2015-04-14 14:49:41

标签: meteor

出于某种原因,我无法让Meteor教程的第11步的最后一部分工作。该步骤的网址位于:https://www.meteor.com/try/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} });
 },

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您在步骤11中实施的代码会阻止其他用户检查/取消选中其他用户的私人任务

从你的代码:

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

如果用户公开,用户仍然可以选中/取消选中不同用户的任务。

查看thiswill.meteor.com,了解用户在应用完成时可以做什么和不能做什么的示例。

答案 1 :(得分: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,而它仍然允许删除任务。