我在控制器中设置了我的授权,如下所示:
[Authorize(Role= "Admin", Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
return View();
}
//configure services..
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});
现在,当我以管理员用户身份登录时。这意味着我有"管理员"角色。我希望我可以访问假期余额控制器,因为我具有管理员角色。但不幸的是,我无法访问该页面,并且收到了禁止的回复。 我预计可以通过"管理员"角色或"仅限员工"声明访问此控制器。 这样工作吗?
感谢您的帮助。
这将使只有具有EmployeeNumber
和Admin
角色的用户才能访问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")]