Я просматривал много SO и других страниц, но до сих пор не смог найти аналогичный случай.Успех аутентификации ASP.NET MVC4, но роли отсутствуют после сборки проекта
Мое приложение использует SimpleMembership. В нем есть пользовательское меню на основе ролей, и большинство действий выполняется с атрибутом [Авторизовать (Roles = "aaa, bbb")].
После того как приложение закроет или покинет браузер в течение некоторого времени, пользователь будет перенаправлен на страницу входа в систему по любой ссылке. Странно то, что имя входа по-прежнему остается действительным для показа, но без имен ролей.
Пользователи имеют доступ к действиям с атрибутом [Авторизовать] в приведенной выше ситуации. Мне интересно, нет ли чего-то, чего я не вижу, или я могу сделать, чтобы сохранить информацию о роли до тех пор, пока аутентификация действительна?
Вот код от действия контроллера для отображения меню:
public ActionResult Menu() { if (Roles.IsUserInRole("Admin")) { return View("MenuAdmin"); } if (Roles.IsUserInRole("Advising")) { return View("MenuAdvising"); } if (Roles.IsUserInRole("StudentDevelopment")) { return View("MenuStudentDevelopment"); }...
Customized _logonPartial для отображения имени пользователя и роли
> @if (Request.IsAuthenticated) {
<text>
Logged in: @Html.ActionLink(User.Identity.Name, "Manage", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" }) as
@String.Join(",", Roles.GetRolesForUser(User.Identity.Name))
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) {
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
</text>
Спасибо за ваш ответ. Ситуация такова: после каждой сборки пользователи будут перенаправлены на страницу входа при доступе к действиям '[Authorize (Roles =" XXX, BBB)). Это не происходит в действиях '[Authorize]' (пользователь может получить доступ после сборки). По моим наблюдениям, пользователи все еще вошли в систему после сборки, но роли отсутствуют. это проблема тайм-аута подключения к базе данных? Интересно, есть ли способ сохранить роли при выполнении атрибута действия. Спасибо – horizon1711
См. Мой обновленный ответ. –
Я попытался создать приложение, предназначенное для имитации ситуации бездействия, которая теряет роли. В настоящее время решена «потеря ролей, но завершена» - это тайм-аут пула приложений IIS. Увеличен тайм-аут, и он отлично работает. Спасибо за вашу помощь. – horizon1711