У меня есть объект домена Note, который принадлежит объекту Document. Только владелец документа может добавлять заметки, поэтому в классе Document есть метод canUserAccess (). На своем сервисном уровне я могу вызвать canUserAccess (), чтобы гарантировать, что пользователь только добавляет примечания к принадлежащим ему документам.
Это хорошо работает для создания, но я столкнулся с проблемой с моим действием редактирования заметки. На посте, viewmodel сопоставляется с объектом Note, предоставляя ему DocumentID. Проблема в том, что злоумышленник может отправить DocumentID, на который у него есть разрешение, и, таким образом, отредактировать заметку, принадлежащую документу, которого у него нет. На своем сервисном уровне я не могу надежно использовать предоставленный DocumentID, но мне нужно получить соответствующий DocumentID, чтобы убедиться, что пользователь может редактировать Заметку. Это пример:
public void editNote(Note note)
{
note.Document = documentRepository.Find(note.DocumentID);
if(note.Document.canUserAccess())
}
Как мне обойти это? Кажется, мне нужно избегать передачи DocumentID с моделью редактирования edit, но как мне гидрировать связанный Document в сервисном слое? Вероятно, есть действительно простое решение, и я просто связываю себя по кругу!