2010-02-01 113 views
1

所以,我有我只希望匿名用户看到一个页面,并通过验证的用户重定向。所以,像这样:“反向”授权页面重定向到登录

<location path="Login_ForgotUserID.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="?" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 

的问题是,当某个用户试图访问它,它会将其重定向到登录页面。我怎样才能让他们更合乎逻辑? obtw,我仅限于.NET v2.0x

+0

好了,通过在web.config这样做的意义就在于把地图控件的优势。因此,例如,如果匿名用户在此页面上并单击登录(LoginStatus控件),它会尝试将其返回到页面。但是,当系统获取请求时,用户无权查看资源,并且由此产生的操作是将它们发送到登录页面。我需要的是一种测试我重定向到的资源的方法,以查看用户是否可以访问它,如果不是以不同的方式处理它。 – 2010-02-01 19:00:18

+0

好吧,以下是我的理解: - SiteMap有一个用户可以访问的链接列表。该列表将被web.config中设置的权限修剪。 - 通常的流程是从匿名到认证。在web.config中,这是通过“拒绝?”实现的。然后“允许*”阻止未经身份验证的用户。 - 当用户尝试转到他们无权访问的页面时,该网站将其重定向到登录页面。 所以,问题是,ASP假定“如果你没有权限,你必须去登录页面”。在所有情况下并非总是如此。我需要解决这个问题。 – 2010-02-03 12:47:46

+0

即使在这种情况下,安全修剪也会隐藏菜单中的链接,所以这只是直接访问URL,对吗? – Greg 2010-02-03 14:46:54

回答

0

不知道如何在web.config中做到这一点。在Login_ForgotUserID.aspx页面中,可能会检查用户在加载/呈现前是否已通过身份验证。如果用户通过身份验证,则将其重定向到一些无害的主页或默认页面。

2

为什么不只是添加if (Request.IsAuthenticated) { Response.Redirect ...到页面的Page_Load事件中,你不必担心配置出来?不幸的是,你只能配置一个页面来处理登录,如果有人没有访问权限,他们将被引导到它。你也可以在Login上检查ReturnURL,看看它是否来自一个页面,并且用户是Authenticated的,但对我来说这是一个hokey解决方案。

+0

这完全正确。在web.config中没有办法做到这一点,你需要编写代码来处理它。您**可以**通过客户配置部分或配置文件的应用程序键部分来部分控制它。 – Greg 2010-02-03 14:42:18

1

好,所以答案是,我需要它呈现之前修改菜单。我从来没有找到通过更改授权/ SecurityTrimming来处理SiteMap的方法。所以我决定尝试修改源代码中的SiteMap,并且发现如何修改MenuItems as they were bound。这似乎是最有效的过程。

0

你也可以在这里看看使用角色。

如果您是默认添加所有用户,说“认证”角色,那么你可以有:

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

你必须确保否认是最前一页列表,因为这些被处理的顺序,并使用第一个匹配。其他

两种方法做类似的事情:

  1. custom sitemap provider以确保当用户通过验证这些网页不会被返回给树视图控件。
  2. control adapter你的TreeView控件,以确保这些网页不会被它渲染。
相关问题