Asp. Net Core Identity - простая авторизация без таблицы ролей - PullRequest
2 голосов
/ 05 августа 2020

Я пытаюсь разработать простой механизм авторизации пользователей для своего приложения без использования специальной c таблицы ролей.

У сущности User есть простое свойство перечисления ролей, и я хотел бы правильно украсить атрибут Authorize на некоторых контроллерах.

Возможно, мне что-то здесь не хватает, но как я могу сообщить фреймворку, какова роль пользователя, когда или сразу после того, как он входит в систему

var result = await _signInManager.PasswordSignInAsync(usr, pwd, false, lockoutOnFailure: false);

, а затем использовать атрибут Authorize?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Метод UserManager.AddClaimAsyn c (TUser, Claim) может помочь добавить указанное утверждение пользователю, вы можете попробовать следующий фрагмент кода, чтобы выполнить ваше требование.

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);

if (result.Succeeded)
{
    var user = await _userManager.FindByNameAsync(Input.Email);

    var userRole = CustomMethod_FindUserRole(Input.Email);

    await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, userRole));

    //...

    await _signInManager.RefreshSignInAsync(user);


    //...
0 голосов
/ 06 августа 2020

Вы можете добавить утверждение роли конкретному пользователю с помощью ProfileService сервера идентификации. где вам нужно добавить

claims.Add(new Claim("Role","Admin"));

Также вам необходимо реализовать политику в вашем starup.cs как

services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminCheck", policy =>
                          policy.RequireClaim("Role", "Admin"));
    });

И в вашем методе действия или контроллере вам нужно поставить декоратор как

[Authorize(Policy = "AdminCheck")]
public class VacationController : Controller
{
    public ActionResult VacationBalance()
    {
    }
}

Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...