Как бороться с взаимоисключающими претензиями в политике по обеспечению соблюдения принципа четырех глаз - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь настроить две политики, которые могут иметь только одно из двух утверждений для применения принципа четырех глаз:

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?

1 Ответ

0 голосов
/ 01 апреля 2020

Работает как описано в самом посте. Возможно, что-то пропустил при настройке моих заявок во время тестирования.

...