在Meteor JS中我想在将对象添加到我的集合之前执行任务。所以我创建了自己的方法,例如:addObject
,如此:
Meteor.methods({
...
addObject: function(obj) {
/*
// this is what i'm trying to figure out...
if ( !MyColl.allow('insert', Meteor.userId, obj) )
throw Meteor.Error(403, 'Sorry');
*/
MyColl.update({ ... }}, { 'multi': true });
MyColl.insert(obj);
},
...
});
但是我注意到.allow不再被调用,因为它已被信任"码。问题是该方法在服务器上但是从客户端调用(通过ObjectiveDDP)所以我仍然需要一种方法来验证客户端是否有权调用addObject
- 有没有办法手动调用{{1从我的服务器代码集合?我尝试了但是得到了内部服务器错误,并且不确定语法应该是什么......在Meteor文档中找不到任何内容。
修改
我发现这有效:
.allow()
但这可能是一种禁止调用私有方法,例如_validators。有谁知道更多的最佳做法'方式是什么?
答案 0 :(得分:0)
您可以在addobject方法中进行验证。例如,如果您只希望登录用户能够添加对象,则可以编写: if(!Meteor.user())抛出新的Meteor.Error(); 在addobject方法的开头。
我个人从不使用allow。
在相关的说明中,collection2和simple-schema包通常可以帮助验证。
答案 1 :(得分:0)
您使用的验证模式可能不是最好的做事方式。
如果你认为可以从客户端调用方法,你就不应该“破解”它做一些不应该做的事情。
如果您正在调用更改数据库中数据的方法,则应在该方法中检查当前登录用户是否有权这样做。
但是,你确定要这样做吗? Meteor还有Collection.allow
和Collection.deny
方法,可用于定义读/写/更新/删除权限。这是处理权限的推荐方法,因此您所做的是反模式。但是,也许在你的情况下,这是绝对必要的?如果没有,您可能想重新考虑用例。
与其他回复一样,使用Collections
或SimpleSchema
等内容来验证数据结构也是一个好主意。