【发布时间】:2020-04-01 08:10:20
【问题描述】:
我正在尝试配置两个策略,它们只能具有两个声明中的一个来强制执行四眼原则:
services.AddAuthorization(options =>
{
options.AddPolicy("CreditApprover", //An approver is not allowed to review.
policy => policy.RequireAssertion(ctx =>
ctx.User.HasClaim(claim => claim.Value == "CreditLoanApprover") &&
!ctx.User.HasClaim(claim => claim.Value == "CreditLoanReviewer")));
options.AddPolicy("CreditReviewer", //A reviewer is not allowed to approve.
policy => policy.RequireAssertion(ctx =>
!ctx.User.HasClaim(claim => claim.Value == "CreditLoanApprover") &&
ctx.User.HasClaim(claim => claim.Value == "CreditLoanReviewer")));
});
我已将Authorize 属性添加到控制器操作中:
[Authorize(Policy = "CreditApprover")]
[HttpPost]
public async Task<ActionResult> Approve()
{
// ...
}
[Authorize(Policy = "CreditReviewer")]
[HttpPost]
public async Task<ActionResult> Review()
{
// ...
}
但是,如果我同时向两个不同的用户提供声明,他们仍然可以查看自己的批准。我希望这些用户不能这样做。这应该像这样,还是我需要建立一个自定义的AuthorizationHandler?
【问题讨论】:
-
看起来一切正常,可能你错过了什么。
-
不确定发生了什么。也许我搞砸了我给自己的声明。似乎一天后如上所述工作:D
标签: c# identityserver4 asp.net-core-identity