Прежде всего, я знаю об этом вопросе: MVC 5 AddToRole требует выхода из системы до его работы?
и этот: Что такое IUserSecurityStampStore <TUser> интерфейс?
поэтому, пожалуйста, не отмечайте это как дубликат.
Я пытаюсь добавить другого пользователя к роли (т.е. пользователь, которого мы добавляем в эту роль, не является текущим пользователем. Если это так, ответ на первый вопрос, к которому я привязан, является достаточным.)
Так же:
IdentityResult result = await userManager.AddToRoleAsync(userID, roleName);
Две ситуации, в которых я делаю это, - это: от страницы администратора, где текущий пользователь является администратором; и webhook, обеспеченный базовой аутентификацией (где вообще нет текущего пользователя).
ПРОБЛЕМА: если пользователь, к которому относится это изменение, входит в систему и использует приложение, мне нужно, чтобы изменения "добавить к роли" применились мгновенно. Им не нужно будет снова и снова выходить из системы, чтобы это произошло, и это должно произойти сразу.
Спасибо всем.
EDIT: Кстати, User.IsInRole(roleName) требует выхода из системы и входа в систему, чтобы отразить добавление в новую роль. UserManager.IsInRole(userID, roleName) этого не делает, потому что (я предполагаю) он идет прямо к таблицам базы данных, которые нужно проверить. Но если пользователь нажимает на метод действия, защищенный ролью, к которой они только что добавлены, им все равно придется снова войти в систему, что достаточно справедливо. Все еще любопытно, есть ли способ обойти это.
EDIT: Вот исходный код атрибута Authorize: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/AuthorizeAttribute.cs
В нем используется User.IsInRole, поэтому мы должны снова войти в систему. Кажется, что метод переопределить - AuthorizeCore (HttpContextBase httpContext). Я не храбрый и не достаточно хорош, чтобы покончить с этим прямо сейчас, но если вы хотите, чтобы много людей найдут это полезным.