我的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中工作吗?