MVC(ASP)在继承时在同一操作上实现不同的用户角色

时间:2017-01-17 19:53:25

标签: c# asp.net-mvc authorization code-duplication

我的项目中有多个控制器可以执行简单的基本工作,如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中都有不同的授权。

我不想在继承的控制器中复制代码。但是也需要正确的授权。有谁知道合适的解决方案?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

创建授权过滤器并找到如下控制器和操作。然后保持这个角色。

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