У меня есть веб-приложение, основанное на ядре ядро dotnet, ядре сущности, сервере идентификации и MS SQL Server в качестве базы данных (Angular 2 on frontend). Я уже выполнил авторизацию пользователя с ролями. Сейчас я использую атрибут Authorize для управления доступом к другой части моего приложения. Здесь мы имеем пример функции апи доступной для 3-х различных ролей:Как управлять доступом пользователей к чтению/записи?
[Authorize(Roles = "ProductAdministrator, WebEditor, Manager")]
public IActionResult Get()
{
IList<Product> products = _service.GetProducts();
return Ok(products);
}
Если вы не один из этих ролей на ваших пользователей, то вы не сможете открыть список продуктов.
Проблема, с которой я столкнулся сейчас, заключается в том, что клиент, с которым я работаю, хочу иметь возможность контролировать доступ к ролям каждого объекта продукта. При создании должен быть какой-то стандартный набор ролей, назначенных объекту. Но пользователь «admin» должен иметь возможность контролировать доступ к каждому объекту/сущности.
Например, мы могли бы иметь этот объект с некоторыми ролями:
var carProduct1 = new Product() {
Name = "Volvo XE 90",
Category = "Car",
Price = 51.600,
Roles = ["CarSeller", "ProductAdministrator", "Insurance", "VolvoExpert"]
};
И тогда это может быть другой объект
var carProduct2 = new Product() {
Name = "Ford Fiesta",
Category = "Car",
Price = 15000,
Roles = ["ProductAdministrator", "CarDealer", "FordExpert", "CarWorkshop"]
};
Вы, вероятно, получить идею прямо сейчас. Как я могу лучше всего перейти от контроля доступа на уровне маршрута до уровня объекта? Есть ли какие-либо записи об этом (мои поисковые запросы не были плодотворными)?