2017-01-17 2 views
0

У меня есть несколько контроллеров в моем проекте, которые выполняют простые базовые задания, такие как 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.

Я не хочу дублировать код в унаследованных контроллерах. Но правильная авторизация также необходима. Кто-нибудь знает подходящее решение? Любая помощь будет высоко ценится.

+0

Возможно, это не лучший способ, но, возможно, он подходит: почему вы не просто проверяете роль пользователя внутри метода Insert, а если он не является возвратом менеджера, то он не разрешен. – alecardv

ответ

1

Создайте фильтр авторизации и найдите контроллер и действие, как показано ниже. А затем сохраните эту роль.

string actionName = this.ControllerContext.RouteData.Values["action"].ToString(); 
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString(); 
Смежные вопросы