我試圖設置通過我的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? –