views:

60

answers:

2

My ASP.NET app is using windows authentication. If I run the following code:

        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";

The listbox will contain the name of every group the user belongs to. If I then call User.IsInRole, and pass in the name of any of those groups, I always get a false.

Can anyone tell me what I am doing wrong?

Thanks

A: 

Is impersonation turned on in web.config?

Brian
+2  A: 

We need to see your web.config. How are roles handled? Is the role manager even enabled?

EDIT:
You need to use this format:

User.IsInRole(@"DOMAINNAME\rolename")

You are leaving off the domain name. If that still doesn't work, make sure you've got your role provider set in web.config:

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

This information comes straight from MSDN. Look at the "Checking Role Membership in Code" section. It's all there.

Bryan
I'm betting that this is it. The identity is there, sure, but membership and roles are two very different things.
Aaronaught
If groups and roles are two different things, how would I enumerate all roles a user belongs to?
Curtis
System.Web.Security.Roles.GetRolesForUser(). ASP.NET *can* use Windows groups as Roles, but that's not required or enabled by default; it entirely depends on your web.config.
Bryan
Can you show me how to modify my web.config file to allow asp.net to treat windows groups as roles?Thanks
Curtis
Now that I look at your code again, it's possible you're just not checking the role properly. See my edit.
Bryan
Thanks, Bryan. Adding defaultProvider to the roleManager did the trick.
Curtis