我的项目中有多个控制器可以执行简单的基本工作,如Get(int id),Get(),Insert(T t)和Edit(T t)。为了避免代码重复,我创建了一个GenericController,然后从这个GenericController继承了所有其他控制器。一切都很好。但是当我想在继承时在同一控制器操作上实现不同的用户角色时,我遇到了问题。例如,看看下面的代码:
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的Insert操作在Product和Generic Controller中都有不同的授权。
我不想在继承的控制器中复制代码。但是也需要正确的授权。有谁知道合适的解决方案?任何帮助将不胜感激。
答案 0 :(得分:1)
创建授权过滤器并找到如下控制器和操作。然后保持这个角色。
string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();