【发布时间】:2016-11-09 05:05:43
【问题描述】:
我正在尝试通过 Meteor 方法设置添加、编辑和删除的权限。 我正在开发一个用户可以添加事件的日历,并且所有事件都对所有人可见,但事件只能由事件所有者更新或删除。
到目前为止,我将它设置为只有登录用户可以插入项目的位置,并且在插入时分配了 createdBy:currentUserId 值,但在插入项目后,我希望将其设置为只有创建用户的用户事件可以更新或删除它。这应该来自创建项目时存储的 createdBy 值
我已通读文档,但仍无法使其正常工作。在我的方法中,我一直在使用 var currentUserId = Meteor.userId(); 设置一个 var,并且我一直在尝试通过 if({createdBy: currentUserId}) {allow edit and delete here} 的方法来限制编辑和删除
到目前为止,我所做的一切都不会阻止其他用户删除或编辑其他用户的事件。
我只发布与编辑相关的代码,因为我假设编辑和删除几乎相同。我对 Meteor 非常陌生,因此我们非常感谢您的任何帮助!
更新!我正在尝试将我的 createdBy 切换到我推荐的 @Yann 方法,但它不允许放置用户 ID,并且只返回错误 createdBy is required 。我正在尝试的代码是
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 }` );
}
}
});
更新结束
添加编辑模式代码
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();
}
});
}
}
});
更新方法
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 }` );
}
}
}
});
【问题讨论】:
标签: javascript meteor fullcalendar meteor-blaze meteor-accounts