Я посмотрел на Roles.IsUserInRole (строка rolename) в отражателе .net, и он разрешается следующим образом:
public static bool IsUserInRole(string roleName)
{
return IsUserInRole(GetCurrentUserName(), roleName);
}
Я бы посмотрел на вашего текущего пользователя. И вот почему:
private static string GetCurrentUserName()
{
IPrincipal currentUser = GetCurrentUser();
if ((currentUser != null) && (currentUser.Identity != null))
{
return currentUser.Identity.Name;
}
return string.Empty;
}
Я бы поспорил, что это возвращает пустую строку, потому что у вас нет текущего пользователя или его имя пустая или пустая.
В методе IsUserInRole(string username, string roleName)
рядом с началом есть следующий блок кода:
if (username.Length < 1)
{
return false;
}
Если ваш GetCurrentUserName()
не вернет ничего значащего, он вернет false, прежде чем вызовет ваш переопределенный метод.
Мораль, от которой нужно отказаться: Отражатель - отличный инструмент:)