Ask a Question related to ASP.NET Security, Design and Development.
-
petersonrj #1
isInRole doesn't work for one user, but works for everyone else
I have an ASP.NET/C# application in which I verify that the current user is a
member of a list of roles before giving them access to particular functions
of the application (read vs update). I am using the IsInRole method of the
IPrincipal object to check for role membership. Currently, I am just
checking the domain/username against a list of domain/usernames, and will
eventually created Groups.
This is working well for all users, except one. Although my application is
correctly identifying this user with the correct domain/username, the
isinrole call returns false.
My code is below:
from the .aspx.cs:
private void Page_Load(object sender, System.EventArgs e)
{
if (!((Security)(Application["security"])).userInRole("edit",
HttpContext.Current.User))
edit = false;
else
edit = true;
}
This code is from a C# object (called "Security") and is called from the
page above:
public Boolean userInRole(String role, IPrincipal principal)
{
Boolean inRole = false;
AppDomain.CurrentDomain.SetPrincipalPolicy(Princip alPolicy.WindowsPrincipal);
//get users from hashtable
String[] users = (String[])securityRolesMap[role];
//loop through users to see is the current user matches
for(int i=0;i< users.Length;i++)
{
String user = users[i];
if (principal.IsInRole(users[i].ToLower()))
{
inRole = true;
break;
}
}
return inRole;
}
Any ideas why this would work okay for everyone except one user?
petersonrj Guest
-
User.IsInRole is always FALSE
Hi, I have the following problem... Pre-requisites: Installation of an Asp.net webservice on a IIS5 server (win2k). Anonymous access is not... -
Custom implementation for User.IsInRole??
I have an app where im using FormsAuthenticaton, and doing my own authentication against a users table in my db. I have no problem actually getting... -
ASP.NET Context.User.IsInRole XP Problem
Hi guys I am having a problem with the following line of code on Windows XP Pro. The variable userRole is a string depicting my role on the local... -
IsInRole doesn't works correctly
In my ASP.NET Application i check whether user that opens application is a member of my created Windows Group(Managers). if... -
User.IsInRole not redirecting
Hi there, I have been reading up on Authorization and role based security for a couple of days now, and am trying to implement this in my... -
Dominick Baier #2
isInRole doesn't work for one user, but works for everyone else
Hi,
i must admin - i don't really understand your logic.
why don't you just call User.IsInRole("role"); ???
another note - the documentation states that your are only allowed to call SetPrincipalPolicy once per AppDomain - maybe something is wrong here...
You only have to call SetPrincipalPolicy if no plumbing has populated Thread.CurrentPrincipal for you (e.g. in a console / winforms app) - but ASP.NET does that.
---
Dominick Baier - DevelopMentor
[url]http://www.leastprivilege.com[/url]
nntp://news.microsoft.com/microsoft.public.dotnet.framework.aspnet.security/<4DACDDCC-5AC0-495A-A583-C44B3F8CC6FE@microsoft.com>
I have an ASP.NET/C# application in which I verify that the current user is a
member of a list of roles before giving them access to particular functions
of the application (read vs update). I am using the IsInRole method of the
IPrincipal object to check for role membership. Currently, I am just
checking the domain/username against a list of domain/usernames, and will
eventually created Groups.
This is working well for all users, except one. Although my application is
correctly identifying this user with the correct domain/username, the
isinrole call returns false.
My code is below:
from the .aspx.cs:
private void Page_Load(object sender, System.EventArgs e)
{
if (!((Security)(Application["security"])).userInRole("edit",
HttpContext.Current.User))
edit = false;
else
edit = true;
}
This code is from a C# object (called "Security") and is called from the
page above:
public Boolean userInRole(String role, IPrincipal principal)
{
Boolean inRole = false;
AppDomain.CurrentDomain.SetPrincipalPolicy(Princip alPolicy.WindowsPrincipal);
//get users from hashtable
String[] users = (String[])securityRolesMap[role];
//loop through users to see is the current user matches
for(int i=0;i< users.Length;i++)
{
String user = users[i];
if (principal.IsInRole(users[i].ToLower()))
{
inRole = true;
break;
}
}
return inRole;
}
Any ideas why this would work okay for everyone except one user?
[microsoft.public.dotnet.framework.aspnet.security]
Dominick Baier Guest
-
petersonrj #3
RE: isInRole doesn't work for one user, but works for everyone else
Dominick,
Thanks for the information on SetPrincipalPolicy method. I removed that
from my code.
The userInRole method that I created is intended to be a reusable method
throughout my application, as I need this functionality in multiple places.
So, I really am just calling User.IsInRole("role") since User is an
IPrincipal.
For the user for which the call wasn't working, I created an AD group and
added them as a member. The isInRole works fine for that user when comparing
to a group, just not against their user id. I'm still not sure why, but at
least I've got the app working.
Thanks for your help!
"Dominick Baier" wrote:
> Hi,
>
> i must admin - i don't really understand your logic.
>
> why don't you just call User.IsInRole("role"); ???
>
> another note - the documentation states that your are only allowed to call SetPrincipalPolicy once per AppDomain - maybe something is wrong here...
>
> You only have to call SetPrincipalPolicy if no plumbing has populated Thread.CurrentPrincipal for you (e.g. in a console / winforms app) - but ASP.NET does that.
>
>
>
> ---
> Dominick Baier - DevelopMentor
> [url]http://www.leastprivilege.com[/url]
>
> nntp://news.microsoft.com/microsoft.public.dotnet.framework.aspnet.security/<4DACDDCC-5AC0-495A-A583-C44B3F8CC6FE@microsoft.com>
>
> I have an ASP.NET/C# application in which I verify that the current user is a
> member of a list of roles before giving them access to particular functions
> of the application (read vs update). I am using the IsInRole method of the
> IPrincipal object to check for role membership. Currently, I am just
> checking the domain/username against a list of domain/usernames, and will
> eventually created Groups.
>
> This is working well for all users, except one. Although my application is
> correctly identifying this user with the correct domain/username, the
> isinrole call returns false.
>
> My code is below:
>
> from the .aspx.cs:
>
> private void Page_Load(object sender, System.EventArgs e)
> {
> if (!((Security)(Application["security"])).userInRole("edit",
> HttpContext.Current.User))
> edit = false;
> else
> edit = true;
>
>
> }
>
> This code is from a C# object (called "Security") and is called from the
> page above:
>
>
> public Boolean userInRole(String role, IPrincipal principal)
> {
> Boolean inRole = false;
>
> AppDomain.CurrentDomain.SetPrincipalPolicy(Princip alPolicy.WindowsPrincipal);
>
> //get users from hashtable
> String[] users = (String[])securityRolesMap[role];
>
> //loop through users to see is the current user matches
>
> for(int i=0;i< users.Length;i++)
> {
> String user = users[i];
> if (principal.IsInRole(users[i].ToLower()))
> {
> inRole = true;
> break;
> }
> }
>
> return inRole;
>
> }
>
>
> Any ideas why this would work okay for everyone except one user?
>
>
> [microsoft.public.dotnet.framework.aspnet.security]
>petersonrj Guest
-
Patrick.O.Ige #4
Re: isInRole doesn't work for one user, but works for everyone else
Have u set ur IIS settings..
Go the Virtual Directory ur aplication is on IIS and clear the check box
Anonymous Access
"petersonrj" <petersonrj@discussions.microsoft.com> wrote in message
news:B5C2F563-B837-4B06-9D1F-680BBE8CD7FD@microsoft.com...places.> Dominick,
>
> Thanks for the information on SetPrincipalPolicy method. I removed that
> from my code.
>
> The userInRole method that I created is intended to be a reusable method
> throughout my application, as I need this functionality in multiplecomparing> So, I really am just calling User.IsInRole("role") since User is an
> IPrincipal.
>
> For the user for which the call wasn't working, I created an AD group and
> added them as a member. The isInRole works fine for that user whenat> to a group, just not against their user id. I'm still not sure why, butcall SetPrincipalPolicy once per AppDomain - maybe something is wrong> least I've got the app working.
>
> Thanks for your help!
>
>
> "Dominick Baier" wrote:
>> > Hi,
> >
> > i must admin - i don't really understand your logic.
> >
> > why don't you just call User.IsInRole("role"); ???
> >
> > another note - the documentation states that your are only allowed to
here...Thread.CurrentPrincipal for you (e.g. in a console / winforms app) - but> >
> > You only have to call SetPrincipalPolicy if no plumbing has populated
ASP.NET does that.nntp://news.microsoft.com/microsoft.public.dotnet.framework.aspnet.security/> >
> >
> >
> > ---
> > Dominick Baier - DevelopMentor
> > [url]http://www.leastprivilege.com[/url]
> >
> >
<4DACDDCC-5AC0-495A-A583-C44B3F8CC6FE@microsoft.com>user is a> >
> > I have an ASP.NET/C# application in which I verify that the currentfunctions> > member of a list of roles before giving them access to particularthe> > of the application (read vs update). I am using the IsInRole method ofwill> > IPrincipal object to check for role membership. Currently, I am just
> > checking the domain/username against a list of domain/usernames, andis> > eventually created Groups.
> >
> > This is working well for all users, except one. Although my applicationthe> > correctly identifying this user with the correct domain/username, the
> > isinrole call returns false.
> >
> > My code is below:
> >
> > from the .aspx.cs:
> >
> > private void Page_Load(object sender, System.EventArgs e)
> > {
> > if (!((Security)(Application["security"])).userInRole("edit",
> > HttpContext.Current.User))
> > edit = false;
> > else
> > edit = true;
> >
> >
> > }
> >
> > This code is from a C# object (called "Security") and is called fromAppDomain.CurrentDomain.SetPrincipalPolicy(Princip alPolicy.WindowsPrincipal)> > page above:
> >
> >
> > public Boolean userInRole(String role, IPrincipal principal)
> > {
> > Boolean inRole = false;
> >
> >
;> >
> > //get users from hashtable
> > String[] users = (String[])securityRolesMap[role];
> >
> > //loop through users to see is the current user matches
> >
> > for(int i=0;i< users.Length;i++)
> > {
> > String user = users[i];
> > if (principal.IsInRole(users[i].ToLower()))
> > {
> > inRole = true;
> > break;
> > }
> > }
> >
> > return inRole;
> >
> > }
> >
> >
> > Any ideas why this would work okay for everyone except one user?
> >
> >
> > [microsoft.public.dotnet.framework.aspnet.security]
> >
Patrick.O.Ige Guest



Reply With Quote

