Permissions Meteor允许更新:I';“我试图让任何用户”;加入;帖子,但只有帖子创建者才能编辑帖子?
因此,我正在尝试构建一个类似于Meteor主页上Parties示例的应用程序。在Parties应用程序中,您可以创建一个派对,邀请他人参加,或将其公开。我想做的是改变它,这样即使它是一个公共聚会,你仍然必须通过点击一个按钮来加入它 除了通过console.logs,我发现这是不允许的,因为单击“加入”按钮的用户正在尝试更新事件,但当前只有事件开始才能访问更新 所以这是正确的Permissions Meteor允许更新:I';“我试图让任何用户”;加入;帖子,但只有帖子创建者才能编辑帖子?,permissions,meteor,Permissions,Meteor,因此,我正在尝试构建一个类似于Meteor主页上Parties示例的应用程序。在Parties应用程序中,您可以创建一个派对,邀请他人参加,或将其公开。我想做的是改变它,这样即使它是一个公共聚会,你仍然必须通过点击一个按钮来加入它 除了通过console.logs,我发现这是不允许的,因为单击“加入”按钮的用户正在尝试更新事件,但当前只有事件开始才能访问更新 所以这是正确的 var currentUser = Meteor.userId(); var currentEventId = t
var currentUser = Meteor.userId();
var currentEventId = this._id;
Events.update(currentEventId, {$addToSet: { attendees: currentUser }}, function(error) {
console.log(error);
if (error) {
throwError(error.reason);
} else {
Router.go('eventPage', {_id: currentEventId});
}
但现在我需要改变这一切
Events.allow({
update: ownsDocument,
remove: ownsDocument});
ownsDocument = function(userId, doc) {
return doc && doc.userId === userId;
}
因此,我认为我需要更改更新,比如:
如果您不是用户,则需要加入或登录。如果您是用户但不是活动创建者,则可以将您的用户ID添加到Attendeers数组中。如果您是事件创建者,则可以编辑事件。我真的不知道在allow update函数中是否允许这样做,或者如何编写它,因为我还是JS的新手。谢谢你的帮助 首先,确保从
.meteor/packages
中删除不安全的包
我建议只执行基本的允许
/拒绝
规则。例如,所有者可以更新某些字段
对于稍微复杂一点的问题,请使用Meteor.methods
。方法将忽略允许和拒绝规则,并允许您执行更复杂的操作
方法总是在服务器端执行/确认,并且可以选择在客户端上进行“模拟”,使其看起来好像是立即执行的
例如,将当前登录的用户添加到事件的方法-
Meteor.methods({
'attendEvent': function(eventId){
// check they're logged in
check(this.userId, String);
// check the eventId isn't something un-expected
check(eventId, String);
// add the user to `attendees`, using `$addToSet` as each user can only attend once
Events.update({_id: eventId}, {$addToSet: { attendees: this.userId}});
}
});
然后,您可以调用客户端上的操作,如:
Template.myTemplate.events({
'click a[data-action="attendEvent"][data-event]': function(e){
// get the eventId from element data- however data could be available in this.eventId / this._id too!
var eventId = $(e.currentTarget).data('event')
Meteor.call('attendEvent', eventId)
}
});
您可以修改
allow()
函数以匹配所需的逻辑。将您的更新:
更改为:
update: function( userId, doc, fields, modifier ){
return ( doc && doc.userId === userId ) || ( userId && modifier === {$addToSet: { attendees: userId}} );
},
在调用'Events.update()之前,您可能还想添加一个
if
来检查客户端上的currentUser
,因为它将失败 谢谢。这很有道理。因此,保留我当前的allow和deny,只添加这个方法。如果这种方法发生了,那么它甚至不需要检查允许/拒绝,否则只有事件所有者可以修改内容?这也非常简洁地回答了这个问题,但我最终从另一个答案中学到了一些额外的东西。我希望我能给你们两个想象中的因果报应,但我甚至没有代表给任何。