2017-01-17 3 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 
} 

를 삽입 액션, GenericController 모두 제품과 일반 컨트롤러에서 다른 권한을 가지고에서 그 상속됩니다.

상속 된 컨트롤러에서 코드를 복제하고 싶지 않습니다. 그러나 올바른 권한 부여도 필요합니다. 누구든지 적절한 해결책을 알고 있습니까? 어떤 도움을 많이 주시면 감사하겠습니다.

+0

아마도 가장 좋은 방법은 아니지만 어쩌면 적합합니다. 삽입 메소드 내부의 사용자 역할을 확인하지 않고 관리자가 아닌 경우 사용자 권한을 확인하지 않는 이유는 무엇입니까? – alecardv

답변

1

인증 필터를 생성하고 아래 에서처럼 컨트롤러와 동작을 찾으십시오. 그리고 나서 그 역할을 유지하십시오.

string actionName = this.ControllerContext.RouteData.Values["action"].ToString(); 
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();