Как правильно авторизовать подмножество коллекции, предоставляемой контроллером? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть контроллер, foo, который обрабатывает запрос GET для foo/bars, отвечая набором объектов bar.Я хотел бы, чтобы мой пользовательский AuthorizationHandler и контроллер работали вместе, чтобы гарантировать, что когда пользователь, у которого есть разрешение на просмотр столбцов с идентификаторами 1, 2 и 3, но не 4, 5 и 6, контроллер возвращает правильное подмножество bar объектов.

Это ядро ​​dotnet 2.2 webApi.Запрос будет иметь токен доступа в заголовке Authorization в качестве токена носителя.Маркер доступа будет иметь соответствующие претензии для принятия решения.Как лучше всего использовать процесс авторизации для создания фильтра, который контроллер должен применять при получении списка bar s из источника данных?

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Это не то, что должно быть сделано с помощью авторизации, так как вы фильтруете набор сущностей.Авторизация предназначена для решения, может ли пользователь получить доступ к что-либо .Что вам нужно сделать, это добавить свойство к сущностям, чтобы отслеживать, кто «владеет» им, потенциально может быть много «владельцев», если это требование.Затем, когда вы выполняете запрос, вы просто добавляете в запрос текущего пользователя, чтобы выбрать только те элементы, владельцами которых являются эти пользователи или один из них.Например, предположим, что вы сохранили что-то вроде OwnerId на сущностях, тогда вы бы сделали:

var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
var foos = await _context.Foos.Where(x => x.OwnerId == userId).ToListAsync();
0 голосов
/ 19 сентября 2019

Вы можете добавить поле в вашем POCO, например, bool IsAdmin, которое вы можете получить или установить.В установленное время вы можете установить его для тех людей, которые имеют доступ.

Тогда вы можете проверить:

var foos = await _context.Foos.Where(x => x.IsAdmin).ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...