Есть приложение asp .net core использующее идентификацию пользователя idenity В приложении можно создавать и редактировать заметки, теперь вопрос, как сделать чтобы заметки были видны не всем пользователям, а только тому , который их создал? то есть мне нужно чтобы я логинился на сайте, и видел бы не все заметки которые существуют, а только те которые я создал, видимо нужно как-то привязывать заметки к айди пользователя, но я не понимаю как
вот картинка моего класса заметки, этот метод не определен
и так же картинка моего контроллера, мне бы конкретно понять в каком месте делать запрос, и все такое в общем если не сложно, то прямо с моими именами код бы увидеть, ну и что в него добавить, могу даже дать вот ссылку на гит, там весь код выложен, если кто-нибудь бы показал как и где подправить было бы супер https://github.com/SoClose172/RazorWebApp
Добавляете в модель ваших заявок ссылку на пользователя:
public class StickyNote
{
public int Id { get; set; }
...
public int OwnerId { get; set; }
public ApplicationUser Owner { get; set; }
}
(Не забудьте сделать миграцию)
При получении в контроллере у вас вероятно есть два метода типа "получить список всех заметок пользователя" и "получить заметку по Id".
В первом случае вы делаете запрос фильтруя заметки по id пользователя:
var stickyNotes = await this.ApplicationDbContext.StickyNotes
.Where(x => x.OwnerId == currentUserId)
.AsNoTracking()
.ToListAsync();
Как вы передадите currentUserId - зависит от вашей архитектуры, обычно как-то так:
protected int CurrentUserId => int.Parse(this.User.FindFirst(ClaimTypes.NameIdentifier).Value);
Во втором случае после получения заметки будете проверять что есть доступ к данной заметке:
var stickyNote = await this.ApplicationDbContext.StickyNotes
.FirstOrDefault(x => x.Id == id);
if(stickyNote.OwnerId != currentUserId)
throw new Exception("no sticky note with such id");
if(stickyNote.OwnerId != currentUserId)
throw new Exception("not permitted");
Или сразу:
var stickyNote = await this.ApplicationDbContext.StickyNotes
.FirstOrDefault(x => x.Id == id && x.OwnerId == currentUserId);
if(stickyNote == null)
throw new Exception("no sticky note with such id or not permitted");
Ссылку на метанит вам тоже неплохую дали, почитайте и там.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Намеренно удаляю базу данных, делаю запрос и обрабатываю ошибки, и остается от БД
Объясните, что в данном примере обозначает параметр <T>, и в чем будет коренная разница от реализации данной ниже?