Как использовать на основе политик и ролей в Asp. Net основной контроллер? - PullRequest
0 голосов
/ 10 января 2020

Я установил свою авторизацию в контроллере следующим образом:

[Authorize(Role= "Admin", Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
    return View();
}

//configure services..
services.AddAuthorization(options =>
{
        options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});

Теперь, когда я вошел как пользователь с правами администратора. Это значит, что у меня есть роль "Admin". Я ожидал, что смогу получить доступ к контроллеру VacationBalance, так как у меня есть роль администратора. Но, к сожалению, я не могу получить доступ к странице, и я получил запрещенный ответ. Я ожидаю, что к этому контроллеру можно получить доступ либо с помощью роли «Администратор», либо с помощью утверждения «EmployeeOnly». Это так работает?

Спасибо за помощь.

1 Ответ

0 голосов
/ 10 января 2020

Таким образом, только пользователь с ролью 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")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...