出于某种原因,我无法让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} });
},
有什么想法吗?
答案 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,而它仍然允许删除任务。