IsInRole always returns false?

D

Dave

Hi,

I'm using Windows authentication with impersonation turned on but I wanted
to pull user roles from my database. Once I person logs in, I want to check
their roles.

I have the following code that loads an array of roles for a
person(hardcoded in this sample but will be pulled from a database later base
on the user's identity.)
However, in subsequent pages when I want to show certain links for an
"Admin", User.IsInRole("Admin") always returns false. Is my implementation
wrong? I don't want to rely on Windows groups but would rather maintain the
roles in my db which I have more control.

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
//These will eventually be pulled from database's UserRole table...
string[] arrRoles = new string[]{"Admin", "User"};
//Add our Principal to the current context
System.Threading.Thread.CurrentPrincipal = new
System.Security.Principal.GenericPrincipal(Context.User.Identity, arrRoles);
}
}
 
D

Dave

Nevermind, I got it by slightly changing the code below to:

Context.User = new
System.Security.Principal.GenericPrincipal(Context.User.Identity, arrRoles);
 
D

Dominick Baier [DevelopMentor]

Hello Dave,

yes -you have to set Context.User

after AuthenticateRequest there is a undocumented event called DefaultAuthentication
which just does this:

Thread.CurrentPrincipal = Context.User;

to keep both values in sync - if you set CurrentPrincipal in your event handler
it will be immediately overwritten.

---------------------------------------
Dominick Baier - DevelopMentor
http://www.leastprivilege.com
Nevermind, I got it by slightly changing the code below to:

Context.User = new
System.Security.Principal.GenericPrincipal(Context.User.Identity,
arrRoles);

Dave said:
Hi,

I'm using Windows authentication with impersonation turned on but I
wanted to pull user roles from my database. Once I person logs in, I
want to check their roles.

I have the following code that loads an array of roles for a
person(hardcoded in this sample but will be pulled from a database
later base
on the user's identity.)
However, in subsequent pages when I want to show certain links for an
"Admin", User.IsInRole("Admin") always returns false. Is my
implementation
wrong? I don't want to rely on Windows groups but would rather
maintain the
roles in my db which I have more control.
protected void Application_AuthenticateRequest(Object sender,
EventArgs e)
{
if (Request.IsAuthenticated)
{
//These will eventually be pulled from database's UserRole table...
string[] arrRoles = new string[]{"Admin", "User"};
//Add our Principal to the current context
System.Threading.Thread.CurrentPrincipal = new
System.Security.Principal.GenericPrincipal(Context.User.Identity,
arrRoles);
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,813
Latest member
lawrwtwinkle111

Latest Threads

Top