我正在关注这两篇文章here和here,以了解如何将基于声明的身份验证和授权从MVC 5迁移到MVC 6。
在MVC 5中,我可以在相应的操作方法
上使用如下的ClaimsPrincipalPermission
属性
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "RecordManagement", Resource = "Edit")]
[HttpPost]
public IHttpActionResult EditRecord(string id)
{
//Code to
//edit
return Ok("Edited: " + id);
}
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "RecordManagement", Resource = "Delete")]
[HttpPost]
public IHttpActionResult DeleteRecord(string id)
{
//Code to
//delete
return Ok("Deleted: " + id);
}
然后从登录过程中具有Operation
和Resource
键值组合的数据库查询构建主对象
然后在类context.Principal.HasClaim(action, resource);
的重写CheckAccess
方法中使用MyCustomClaimCheck : ClaimsAuthorizationManager
调用来验证访问权限。
似乎没有一种方法可以使用我所看到的MVC6框架来实现类似的东西。似乎唯一接近的是使用此行添加策略as per docs
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
}
但这意味着我会使用应用程序中的所有可能策略来膨胀该方法。如果我的理解是正确的,这不是一个非常好的方法。有没有人找到使用基于声明的方法的解决方法,就像在MVC5中一样?