Meteor - 允许多个用户编辑帖子

时间:2014-12-12 14:44:02

标签: javascript meteor

  • 我无法使用节点服务器调试器,所以我在这里发帖,看看我是否可以在正确的方向上轻推。

我试图允许多个用户编辑由其特定公司内的任何用户创建的文档。我的代码如下。任何帮助将不胜感激。

(服务器)

ComponentsCollection.allow({
  // Passing in the user object (has profile object {company: "1234"}
  // Passing in document (has companyId field that is equal to "1234"
  update: function(userObject, components) { 
    return ownsDocument(userObject, components); 
  }
});

(服务器)

// check to ensure user editing document created/owned by the company
ownsDocument = function(userObject, doc) {
  return userObject.profile.company === doc.companyId;
}

我得到的错误是:调用方法'/ components / update时出现异常TypeError:无法读取未定义的属性'company'

我尽量保证尽可能安全,但在向用户提供任何数据之前要做一些检查,所以我不确定是否需要进行额外的检查。任何关于允许多个用户编辑公司创建的文档的安全建议都会很棒。提前致谢。 -Chris

更新(解决方案):

// check that the userId specified owns the documents
ownsDocument = function(userId, doc) {

  // Gets the user form the userId being passed in
  var userObject = Meteor.users.findOne(userId);

  // Checking if the user is associated with the company that created the document being modified 
  // Returns true/false respectively
  return doc.companyId === userObject.profile.companyId;
}

1 个答案:

答案 0 :(得分:1)

查看文档,看起来allow / deny函数的第一个参数是用户ID,而不是用户文档。因此,您必须先Meteor.users.findOne(userId)才能访问该文档。

请记住,用户可以写入自己的profile子文档,因此,如果您不禁用它,用户将能够更改自己的公司,允许他们编辑任何帖子。您应该将company移到profile之外。

(如果你无法使用正确的调试器,那么老式的console.log仍然有用。将console.log(userObject)添加到ownsDocument可能会显示解决方案。)