как связать заметки с пользователем

158
29 апреля 2019, 06:50

Есть приложение asp .net core использующее идентификацию пользователя idenity В приложении можно создавать и редактировать заметки, теперь вопрос, как сделать чтобы заметки были видны не всем пользователям, а только тому , который их создал? то есть мне нужно чтобы я логинился на сайте, и видел бы не все заметки которые существуют, а только те которые я создал, видимо нужно как-то привязывать заметки к айди пользователя, но я не понимаю как

вот картинка моего класса заметки, этот метод не определен

и так же картинка моего контроллера, мне бы конкретно понять в каком месте делать запрос, и все такое в общем если не сложно, то прямо с моими именами код бы увидеть, ну и что в него добавить, могу даже дать вот ссылку на гит, там весь код выложен, если кто-нибудь бы показал как и где подправить было бы супер https://github.com/SoClose172/RazorWebApp

Answer 1

Добавляете в модель ваших заявок ссылку на пользователя:

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");

Ссылку на метанит вам тоже неплохую дали, почитайте и там.

READ ALSO
Оптимизация размера апк файла

Оптимизация размера апк файла

В папке streaming assets лежали файлы в форматеmp4

135
C# SQLite Как удалить файл базы данных?

C# SQLite Как удалить файл базы данных?

Намеренно удаляю базу данных, делаю запрос и обрабатываю ошибки, и остается от БД

186
Неясности с интерфейсом (interface)

Неясности с интерфейсом (interface)

Объясните, что в данном примере обозначает параметр <T>, и в чем будет коренная разница от реализации данной ниже?

154