Я пытаюсь установить разрешения для добавления, редактирования и удаления с помощью моих методов 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 }`);
}
}
});
КОНЕЦ UPDATE
добавить редактировать модальный метод код
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 }`);
}
}
}
});
Спасибо за советы по вводу этого идентификатора пользователя! Один вопрос я изменил свой метод обновления, чтобы использовать 'if (event.createdBy === currentUserId)', но кажется, что он не может получить идентификатор текущего пользователя. Любая идея о том, что может пойти не так? Благодаря! –
Должно быть только 'Meteor.userId()', как показано выше. –
Просто попробовал 'if (event.createdBy === Meteor.userId())' и все равно ничего console.log в операторе if также ничего не возвращает. Может ли быть что-то, что мешает ему получить userId? –