В моем приложении ASP.NET MVC 2 возникла ситуация, когда при использовании атрибута [Authorize(Roles = "Admin,User,Test")]
в любом из методов контроллера мой пользовательский поставщик ролей не вызывается. Сложность в том, что когда я запускаю приложение на сервере Visual Studio Web Dev, этот GetRolesForUser вызывается каждый раз. Когда я устанавливаю приложение в IIS, этого больше не происходит.
Я использую Windows 7 x64 Enterprise.
Роль провайдера настроен в web.config следующим образом:
<roleManager defaultProvider="GTTRoleProvider" enabled="true">
<providers>
<clear />
<add name="GTTRoleProvider" type="GTT.Security.GTTRoleProvider, GTT.Security" applicationName="GTT" />
</providers>
</roleManager>
В реализации поставщика ролей этот метод реализован следующим образом:
public override string[] GetRolesForUser(string username)
{
if (log.IsDebugEnabled)
log.DebugFormat("Gettings roles for user {0}", username);
BaseConfiguration cfg = new BaseConfiguration();
using (ISession session = cfg.OpenSession())
{
IUserDAO userDao = new UserDAO(session);
GUser user = userDao.GetByUserName(username);
return new string[] { user.BaseRole.Name };
}
}
Что я делаю не так или чего мне не хватает?
т. Erki.
[РЕДАКТИРОВАТЬ: 1]
Мне удалось отследить источник моих проблем - у меня также был реализован собственный класс Principal, но я предоставил пустые роли базовому конструктору GenericPrincipal. Заполнив это ролями пользователя, все начало работать. Но метод GetRolesForUser все еще не выполняется для моего поставщика пользовательских ролей.
Кто-нибудь может объяснить, почему это работает на сервере разработки ASP.NET (внутри Visual Studio), а не в IIS?