Я пытаюсь настроить две политики, которые могут иметь только одно из двух утверждений для применения принципа четырех глаз:
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
?