如何在核心控制器中使用基于策略和基于角色 Asp.Net?



我在控制器中设置了我的授权,如下所示:

[Authorize(Role= "Admin", Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
return View();
}
//configure services..
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});

现在,当我以管理员用户身份登录时。这意味着我有"管理员"角色。我希望我可以访问假期余额控制器,因为我具有管理员角色。但不幸的是,我无法访问该页面,并且收到了禁止的回复。 我预计可以通过"管理员"角色或"仅限员工"声明访问此控制器。 这样工作吗?

感谢您的帮助。

这将使只有具有EmployeeNumberAdmin角色的用户才能访问VacationBalance操作,要达到您的要求,您可以创建另一个策略来检查:

services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOrAdmin", policy =>
{
policy.RequireAssertion(context =>
{
var isEmployee = context.User.HasClaim(c=>c.Type== "EmployeeNumber");
var roles= context.User.Claims.Where(x => x.Type == ClaimTypes.Role).ToList();
var isAdmin = roles.Any(str => str.Value.Equals("Admin"));
return isEmployee || isAdmin ;
});
});
});

然后将策略应用于受保护的操作:

[Authorize( Policy = "EmployeeOrAdmin")]

相关内容

  • 没有找到相关文章

最新更新