在之前的例子中,我都是运用的很小的demo,一切的测试都能够在客户端直接对database举行CURD.现实的项目中有能够须要关于用户操纵databse有肯定的权限掌握,在meteor中,最好的要领是经由过程自定义要领(call method
)的情势,替代用户端直接举行,insert,update和remove。经由过程这类体式格局我们能够用权限考证的体式格局关于用户端提交的行动推断,肯定用户的提交情势是相符我们的要求的。
移除 insecure
每一个meteor建立的项目,默许是 insecure
的 ,默许是许可用户在客户端是能够变动database的,如今须要移除insecure
meteor remove insecure
Changes to your project's package version selections:
insecure removed from your project
insecure: removed dependency
insecure
胜利移除,移除以后我们在Meteor.isClient中的insert,update,remove都没法运用了,由于不开启insecure的运用不能在客户端直接更新database的数据,须要运用下面的要领才能够更新database。
定义要领
我们定义要领让客户端代码能够操纵数据库,Meteor.methods
用来定义要领的,他定义的要领能够不须要在client或许server内里,双方都能够接见!
Meteor.methods({
addLanguage: function (text) {
// auth
//if (!Meteor.userId()) {
// throw new Meteor.Error("need login");
//}
Languages.insert({
name: text,
createdAt: new Date()
});
}
});
再对update 和remove操纵增添定义的要领:
updateLanguage: function (_id) {
Languages.update(_id, {
$set: {updateAt: new Date()}
})
},
removeLanguage: function (_id) {
Languages.remove(_id);
}
挪用 Meteor.Methods
挪用已定义的Meteor须要运用:Meteor.call
Template.body.events({
'submit .new-language': function (event) {
event.preventDefault();
var text = event.target.text.value;
Meteor.call("addLanguage", text);
}
});
Meteor.call
的第一个参数是函数名字,第二个参数是须要传的变量。一样的我们须要增添update和delete要领。
如今insert,update和delete又能够一般的在工作了。
这类工作体式格局的道理相似与ajax,客户端发送要求到服务器端,服务器更新database,关照客户端,客户端准确的显现数据。
项目地点:https://github.com/jjz/meteor/tree/master/meteor-security