Asp.net的表单身份验证

问题描述:

我在Asp.net应用程序上工作,我的应用程序中有4个角色。 1.管理员2.用户3.经销商4.加盟商。而我使用表单身份验证这一切都为单个角色(用户)正常工作。但现在我有4个角色,我没有得到如何管理这个。我有4个文件夹供不同的用户使用。 如果我用经销商帐户登录,如果我更改用户的网址,那么它也允许我访问用户部分。但我不想要这个。我需要在我的应用程序中,用户只能访问他的访问区域。手段如果您的经销商登录,那么他只能访问经销商页面或相同的文件夹没有别的。Asp.net的表单身份验证

请帮我找到这个解决方案。

你需要为你限制访问每个文件夹中的web.config文件只能用“管理员”的角色设置相应的身份验证设置,即

<authorization> 
    <deny users="?" /> 
    <allow roles="Administrators" /> 
    <deny users="*" /> 
</authorization> 

将允许访问验证用户。

+0

您不需要拒绝匿名用户。您只需要允许角色和拒绝全部。 – Phill 2010-12-10 12:02:59

+0

确实如此,但确实有一点捷径,为什么尝试在匿名用户上查找角色。 – Lazarus 2010-12-10 12:20:32

+0

只是好奇...为什么投票呢? – Lazarus 2010-12-10 12:23:44

这里有两件事要看。首先,如果您在web.config中使用<location>元素,则按角色限制每个文件夹的访问权限应该足够简单。

<location path="Resellers"> 
    <system.web> 
     <authorization> 
      <allow roles="Reseller"/> 
      <deny roles="*"/> 
     </authorization> 
    </system.web> 
</location> 

<location path="Users"> 
    <system.web> 
     <authorization> 
      <allow roles="User"/> 
      <deny roles="*"/> 
     </authorization> 
    </system.web> 
</location> 
... 

此外,在您的个人网页,你可以调用IsUserInRole函数来检查你的用户是否访问页面正确的角色。

你可能想要得到Beginning ASP.NET Security的副本,它有关于如何做到这一点的很好的信息。

+0

不会否认所有角色,然后停止? – Lazarus 2010-12-10 12:22:02

+0

@Lazarus可能......我永远不会记得设置授权元素的所有细节。已经交换了他们。 – PhilPursglove 2010-12-10 12:28:54

+0

我相信他们按照定义的顺序处理:) – Lazarus 2010-12-10 12:32:56

在每个文件夹中,您必须放置一个web.config文件,以限制对相关角色的访问。例如,在转售商文件夹中,您有一个包含以下内容的web.config:

<authorization> 
    <deny users="*"/> 
    <allow roles="Resellers"/> 
</authorization> 

对于其他文件夹等。

+0

不会击中拒绝所有用户并停止? – Lazarus 2010-12-10 12:21:21

使用如下代码:

<location path="Users"> 
     <system.web> 
      <authorization> 
       <allow roles="Users"/> 
       <deny users="*"/> 
      </authorization> 
     </system.web> 
    </location> 

您可以使用web.config文件设置权限,或者您也可以得到更精细,装饰要锁定这样的类或方法:

[PrincipalPermissionAttribute(SecurityAction.Demand, Role = @"Administrators")] 

所有这些都是您可以设置的角色管理器的一部分。首先阅读this文章,解释做什么。