Я добавляю и удаляю пользователей из ролей в моем коде контроллера и в моем общем представлении _Layout, я использую User.IsInRole для проверки и удаления ссылок соответственно, но это работает, только если пользователь выходит из веб-сайта, тогда User.IsInRole возвращает правильный результат?
Есть ли способ перезагрузить страницу _Layout, чтобы она правильно захватила данные?
Код контроллера для смены ролей
_userManager.RemoveFromRole(obj.strUserID, "Consumer");
_userManager.AddToRole(obj.strUserID, "Provider");
_context.SaveChanges();
return View("Success");
Общий вид _Layout, который используется несколькими страницами
if (!User.IsInRole("Provider"))
{
<li>@Html.ActionLink("Become a Member", "Memmber", "CustProfile")</li>
}
Однажды я удаляю и добавляю новые роли пользователю, я хочу, чтобы _Layout.cstml отображал правильные ссылки, но это не так. Он работает нормально, если я выйду и войду снова.
Есть ли способ исправить это поведение?
Пользователь кэшируется до выхода из системы, поэтому вам придется подписывать его снова. Пожалуйста, используйте следующий код, чтобы подписать их снова. Кроме того, не забудьте перенаправить их вместо просмотра, чтобы страница перезагрузилась.
private ApplicationSignInManager _signInManager;
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ??
HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
Добавьте следующий код после смены ролей:
var userinDb = _context.Users.Find(UserID);
await SignInManager.SignInAsync(userinDb, true,false);
return RedirectToAction("Success");