我试图允许多个用户编辑由其特定公司内的任何用户创建的文档。我的代码如下。任何帮助将不胜感激。
(服务器)
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;
}
答案 0 :(得分:1)
查看文档,看起来allow / deny函数的第一个参数是用户ID,而不是用户文档。因此,您必须先Meteor.users.findOne(userId)
才能访问该文档。
请记住,用户可以写入自己的profile
子文档,因此,如果您不禁用它,用户将能够更改自己的公司,允许他们编辑任何帖子。您应该将company
移到profile
之外。
(如果你无法使用正确的调试器,那么老式的console.log
仍然有用。将console.log(userObject)
添加到ownsDocument
可能会显示解决方案。)