我有一个删除了自动发布的Meteor应用程序。
在这个应用程序中,我想允许管理员讨论任何用户,但其他用户应该只能更新自己的用户。使用简单的Meteor.users.allow,更新函数永远不会被调用(我可以告诉),但如果我使用Meteor.users.deny并反转逻辑,它可以正常工作。
我的应用中只有一个Meteor.users.allow功能。我可以忍住使用deny,但任何人都可以告诉我,我做错了什么?
我的允许函数,它从不记录任何内容:
console.log("Setting Meteor.users.allow");
Meteor.users.allow({
insert: function (userId, doc) {
// only admin can insert
var u = Meteor.users.findOne({_id:userId});
return (u && u.isAdmin);
},
update: function (userId, doc, fields, modifier) {
console.log("user "+userId+"wants to modify doc"+doc._id);
if (userId && doc._id === userId) {
console.log("user allowed to modify own account!");
// user can modify own
return true;
}
// admin can modify any
var u = Meteor.users.findOne({_id:userId});
return (u && u.isAdmin);
},
remove: function (userId, doc) {
// only admin can remove
var u = Meteor.users.findOne({_id:userId});
return (u && u.isAdmin);
}
});
我的拒绝功能,记录并运作:
console.log("Setting Meteor.users.deny");
Meteor.users.deny({
insert: function (userId, doc) {
// only admin can insert
var u = Meteor.users.findOne({_id:userId});
return !(u && u.isAdmin);
},
update: function (userId, doc, fields, modifier) {
console.log("user "+userId+"wants to modify doc"+doc._id);
if (userId && doc._id === userId) {
console.log("user allowed to modify own account!");
// user can modify own
return false;
}
// admin can modify any
var u = Meteor.users.findOne({_id:userId});
return !(u && u.isAdmin);
},
remove: function (userId, doc) {
// only admin can remove
var u = Meteor.users.findOne({_id:userId});
return !(u && u.isAdmin);
}
});
答案 0 :(得分:1)
您确定将Meteor.users.allow代码放在服务器中吗?
我在客户端使用allow而不是服务器代码时遇到了同样的问题。
答案 1 :(得分:0)
第一个允许移动它。喜欢或条款。大多数拒绝例程从不抱怨,所以它必须经历所有 - 也许最后一个会失败。现在,你可以说它可以在第一次拒绝时停止,但是他们需要一些永远被解雇的东西,所以他们没有优化那些代码。
您需要拥有此代码的更安全版本:
ok = ->
true
Agents.allow
insert: ok
update: ok
remove: ok # authorize.authorsAndAdmins