У меня есть несколько контроллеров в моем проекте, которые выполняют простые базовые задания, такие как Get (int id), Get(), Insert (T t) и Edit (T t). Чтобы избежать дублирования кода, я создал GenericController, а затем унаследовал все остальные контроллеры от этого GenericController. Все работает очень хорошо. Но я сталкиваюсь с проблемами, когда хочу реализовать разные роли пользователей в одном и том же действии контроллера при наследовании. Например, посмотрите на код ниже:MVC (ASP) Реализовать разные роли пользователей в одном действии при наследовании
public class GenericController<T>: Controller{
//other actions
[HttpGet]
public async Task<IEnumrable<T>> Get(){
//necessary action goes here
}
[HttpPost]
public async Task<IActionResult> Insert(T t){
//necessary action with t
}
}
[Authorize]
public class ProductController: GenericController<Product>{
//Get action is authorized to everyone
//Insert action is authorized to Manager only
}
[Authorize]
public class EmployeeController: GenericController<Employee>{
//Get action is authorized to everyone
//Insert action is authorized to Owner only
}
В приведенном выше фрагменте действие Insert, который наследуется от GenericController имеет различные полномочия в обоих продуктов и Generic Controller.
Я не хочу дублировать код в унаследованных контроллерах. Но правильная авторизация также необходима. Кто-нибудь знает подходящее решение? Любая помощь будет высоко ценится.
Возможно, это не лучший способ, но, возможно, он подходит: почему вы не просто проверяете роль пользователя внутри метода Insert, а если он не является возвратом менеджера, то он не разрешен. – alecardv