Пользователь IsInRole работает только после входа и выхода с сайта - PullRequest
2 голосов
/ 29 мая 2019

Я добавляю и удаляю пользователей из ролей в коде моего контроллера и в своем общем представлении _Layout, я использую User.IsInRole для соответствующей проверки и удаления ссылок, но это работает только в том случае, если пользователь выходит из веб-сайта, затем User.IsInRole возвращает правильный результат?

Есть ли способ перезагрузить страницу _Layout, чтобы она правильно собирала данные?

Код контроллера для смены ролей

  _userManager.RemoveFromRole(obj.strUserID, "Consumer");
  _userManager.AddToRole(obj.strUserID, "Provider");
  _context.SaveChanges();
  return View("Success");

Общий _Layout View, который используется несколькими страницами

  if (!User.IsInRole("Provider"))
      {
       <li>@Html.ActionLink("Become a Member", "Memmber", "CustProfile")</li>
      }

Как только я удаляю и добавляю новые роли в User, я хочу, чтобы _Layout.cstml отображал правильные ссылки, но это не так. Это работает нормально, если я выйду и войду снова.

Есть ли способ исправить это поведение?

1 Ответ

1 голос
/ 31 мая 2019

Пользователь кэшируется до выхода из системы, поэтому вам придется снова его подписать. Пожалуйста, используйте следующий код, чтобы подписать их снова. Кроме того, убедитесь, что перенаправили их вместо просмотра, чтобы страница была перезагружена.

 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");

...