Роли кэшируются в куки (зашифрованы, конечно). Простейшим решением будет отключить кэширование в файле web.config. Вы потеряете некоторую производительность.
В противном случае вы должны как-то повторно отправить файл cookie аутентификации. Одна из основных проблем заключается в том, что многие браузеры не принимают файлы cookie при перенаправлениях с методом post.
Другое решение, которое сработало для меня:
1) В методе aspx выйдите из системы и сохраните имя пользователя в сеансе
// Добавить пользователя в анализатор ролей и обновить заявку
Roles.AddUserToRole(User.Identity.Name, Constants.ROLE_REVISOR);
FormsAuthentication.SignOut();
FormsAuthentication.SetAuthCookie(User.Identity.Name, false); //Might work in some browsers
Session["REFRESHROLES"] = User.Identity.Name;
Response.Redirect("someprotectedurl?someid=" + someid);
2) На странице входа снова войдите в систему, если имя пользователя сохранено в сеансе
protected void Page_Load(object sender, EventArgs e)
{
string returnUrl = Request.QueryString["ReturnUrl"];
if(String.IsNullOrEmpty(returnUrl) == false)
{
if(Session["REFRESHROLES"] != null)
{
if(!string.IsNullOrEmpty(Session["REFRESHROLES"].ToString()))
{
FormsAuthentication.SetAuthCookie(Session["REFRESHROLES"].ToString(), false);
Session.Remove("REFRESHROLES");
Response.Redirect(returnUrl);
return;
}
}