Получить роли из БД в HttpModule - PullRequest
0 голосов
/ 25 июня 2019

Мне нужно получить роли пользователя из БД в соответствии с характером моего приложения. Я аутентифицирую пользователя в context.AcquireRequestState += context_AcquireRequestState; обработчике событий в HttpModule. Могу ли я делать вызовы БД из HttpModule для назначения ролей в Identity? Это хорошая практика? если нет, то где я должен сделать это до того, как будет вызван метод действия контроллера .?

1 Ответ

0 голосов
/ 25 июня 2019

Я не знаю, что вы делаете с состоянием запроса Aquaire, в идеале вы должны сделать следующее:

[Authorize(Roles="Admin")]
[Route("user/{id:guid}/roles")]
[HttpPut]
public async Task<IHttpActionResult> AssignRolesToUser([FromUri] string id, [FromBody] string[] rolesToAssign)
{

    var appUser = await this.AppUserManager.FindByIdAsync(id);

    if (appUser == null)
    {
        return NotFound();
    }

    var currentRoles = await this.AppUserManager.GetRolesAsync(appUser.Id);

    var rolesNotExists = rolesToAssign.Except(this.AppRoleManager.Roles.Select(x => x.Name)).ToArray();

    if (rolesNotExists.Count() > 0) {

        ModelState.AddModelError("", string.Format("Roles '{0}' does not exixts in the system", string.Join(",", rolesNotExists)));
        return BadRequest(ModelState);
    }

    IdentityResult removeResult = await this.AppUserManager.RemoveFromRolesAsync(appUser.Id, currentRoles.ToArray());

    if (!removeResult.Succeeded)
    {
        ModelState.AddModelError("", "Failed to remove user roles");
        return BadRequest(ModelState);
    }

    IdentityResult addResult = await this.AppUserManager.AddToRolesAsync(appUser.Id, rolesToAssign);

    if (!addResult.Succeeded)
    {
        ModelState.AddModelError("", "Failed to add user roles");
        return BadRequest(ModelState);
    }

    return Ok();
}

Источник прочитан здесь

...