在所有控制器路线上定义验证

时间:2019-12-19 10:26:08

标签: c# asp.net .net asp.net-mvc asp.net-core

比方说,我创建了包含所有引用管理页面的管理控制器。 在每个控制器中,我都会验证用户是admin以及其他验证, 看起来我的代码重复了一次,我想在管理器中输入任何路由并进行这些验证时使本地事件发生,我知道我可以声明一个执行这些验证的函数,但是我又需要在AdminController中的任何方法上设置她

感谢助手。

管理控制器方法示例:

public IActionResult References()
{
    var user = Systems.Users.GetUser(HttpContext);
    if (Systems.Users.IsValid(user) && 
        Systems.Users.IsPermission(user, Models.User.EUPermissions.Admin))
            return View();
    return View("Error404");
}

1 个答案:

答案 0 :(得分:1)

您可以在Startup.cs ConfigureServices()方法中执行以下操作:

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminAccess", policy => policy.RequireRole("Admin"));
});

现在在您的控制器中,您可以使用以下内容:

[Authorize(Policy = "AdminAccess")]
public class AdministratorController : Controller
{
  public IActionResult Index()
  {
    return View();
  }
}

这样,您不必编写代码来检查访问。 .Net核心促进了依赖项注入和其他扎实的原则,并且您没有编写的方法要承担多个责任。