2010-03-15 2 views
6

В моем приложении ASP.NET используется проверка подлинности Windows. Если я запустил следующий код:User.IsInRole возвращает false

WindowsIdentity wi = (WindowsIdentity)User.Identity; 

foreach (IdentityReference r in wi.Groups) 
{ 
    ListBox1.Items.Add(r.Translate (typeof (NTAccount)).Value); 
} 

if (User.IsInRole ("Everyone")) 
    Label1.Text = "Is in role"; 

В списке будет указано имя каждой группы, к которой принадлежит пользователь. Если я тогда звоню User.IsInRole и передаю имя любой из этих групп, я всегда получаю ложное.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Благодаря

+1

Спасибо за подсказку. Я запомню это в будущем. – Curtis

+0

Я очень ценю этот код устранения неполадок. – mcfea

ответ

7

Мы должны видеть ваше web.config. Как обрабатываются роли? Включен ли менеджер ролей?

EDIT:
Вы должны использовать этот формат:

User.IsInRole(@"DOMAINNAME\rolename") 

Вы убрав имя домена. Если это все еще не работает, убедитесь, что вы получили вашу роль набор провайдера в web.config:

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"/> 

Эта информация поступает прямо из MSDN. Посмотрите раздел «Проверка роли членства в коде». Это все.

+1

Держу пари, что это он. Идентичность есть, конечно, но членство и роли - это две разные вещи. – Aaronaught

+0

Если группы и роли - две разные вещи, как бы я перечислял все роли, к которым принадлежит пользователь? – Curtis

+1

System.Web.Security.Roles.GetRolesForUser(). ASP.NET * может * использовать группы Windows как роли, но по умолчанию это не требуется или включено; это полностью зависит от вашего web.config. – Bryan

Смежные вопросы