我试图设置通过我的Meteor方法添加,编辑和删除的权限。 我正在制作用户可以添加事件的日历,并且所有人都可以看到事件,但事件只能由事件所有者更新或删除。无法在Meteor.methods中设置正确的编辑权限
到目前为止,我只有登录的用户才能插入项目,并且插入项目时createdBy:currentUserId
赋值,但插入项目后我希望将其设置为只有创建事件的用户可以更新或删除它。这应该来自创建项目时存储的createdBy
值
我已阅读文档,但仍无法使其工作。在我的方法我已经设置与var currentUserId = Meteor.userId();
一个变种,我一直试图限制编辑和删除通过法if({createdBy: currentUserId}) {allow edit and delete here}
一切我都试过到目前为止不会阻止其他用户删除或编辑其他用户的事件。
我只发布与编辑相关的代码,因为我假设编辑和删除将几乎完全相同。我对流星非常陌生,所以任何和所有的帮助表示赞赏!
更新!我试图将我的createdBy
转换为我的方法,如@Yann推荐的方法,但不允许放置用户标识,只需返回createdBy
的错误即可。我想要的代码更新的
Meteor.methods({
addEvent(event) {
var currentUserId = Meteor.userId();
var createdBy = currentUserId;
check(event, {
title: String,
start: String,
end: String,
type: String,
guests: Number
});
try {
return Events.insert(event, {
$set: createdBy
});
} catch (exception) {
throw new Meteor.Error('500', `${ exception }`);
}
}
});
END
的附加编辑模式代码
Template.addEditEventModal.events({
'submit form' (event, template) {
event.preventDefault();
var currentUserId = Meteor.userId();
let eventModal = Session.get('eventModal'),
submitType = eventModal.type === 'edit' ? 'editEvent' : 'addEvent',
eventItem = {
createdBy: currentUserId,
title: template.find('[name="title"]').value,
start: template.find('[name="start"]').value,
end: template.find('[name="end"]').value,
type: template.find('[name="type"] option:selected').value,
guests: parseInt(template.find('[name="guests"]').value, 10)
};
if (submitType === 'editEvent') {
eventItem._id = eventModal.event;
}
Meteor.call(submitType, eventItem, (error) => {
if (error) {
Bert.alert(error.reason, 'danger');
} else {
Bert.alert(`Event ${ eventModal.type }ed!`, 'success');
closeModal();
}
});
},
'click .delete-event' (event, template) {
let eventModal = Session.get('eventModal');
if (confirm('Are you sure? This is permanent.')) {
Meteor.call('removeEvent', eventModal.event, (error) => {
if (error) {
Bert.alert(error.reason, 'danger');
} else {
Bert.alert('Event deleted!', 'success');
closeModal();
}
});
}
}
});
update方法
Meteor.methods({
editEvent(event) {
check(event, {
_id: String,
createdBy: String,
title: Match.Optional(String),
start: String,
end: String,
type: Match.Optional(String),
guests: Match.Optional(Number)
});
var currentUserId = Meteor.userId();
if({createdBy: currentUserId}){
try {
return Events.update(event._id, {
$set: event
});
} catch (exception) {
throw new Meteor.Error('500', `${ exception }`);
}
}
}
});
感谢您的插入该用户ID的建议!有一个问题,我改变我的更新方法使用'if(event.createdBy === currentUserId)',但它好像无法获得当前用户的ID。任何想法可能会出错?谢谢! –
应该只是'Meteor.userId()'如上所示。 –
刚刚尝试过'if(event.createdBy === Meteor.userId())',并且if语句中仍然没有任何console.log也不会返回任何内容。有没有办法阻止它获得userId? –