.net会员拒绝登录

时间:2009-08-20 13:44:24

标签: asp.net-membership

我一直在使用.net登录很长一段时间了,但是我的最新项目要求编写一些不太好的编码。

我有一个数据库,其中包含.net成员资格的表格等。 有4个角色:

  • 管理
  • BasicAdmin
  • PowerAdmin
  • 会员

现在前3名能够登录管理系统,但是我想拒绝登录角色成员的人,我在下面添加了webconfig:

<authorization>
  <deny roles="Member"/>
  <deny users="?"/>
</authorization>

这在某种程度上起作用。它将处于“成员”角色的用户重定向到登录页面,但它不会使登录失败,就像您未注册并输入错误数据时所获得的那样。

会员可以登录该网站的会员区域,这对于管理员来说是不受限制的。

有谁知道我哪里出错了,我错过了什么或者这不可能吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

您的会员可以登录并访问会员内容,但在他们尝试访问管理部分的内容时会重定向。它是按设计工作的。该成员不会收到失败的登录消息,因为他们没有登录失败,而是被拒绝访问。

在整个应用程序中,您可以检查一个人是否正在尝试访问他们无法访问的页面并触发他们无权访问的消息,但这是额外的工作但可行。

您还可以修改您的应用程序,只有当用户处于正确的角色时,才会显示指向该站点某些部分的链接。例如,Roles.IsUserInRole(“role”)将检查当前登录的身份/用户是否处于角色中。在2.0中还有一个LoginView控件可以包装控件,可以很好地为你完成。

编辑:根据您的第一条评论澄清。

这就是角色提供者的设计方式。当您尝试访问web.config中被拒绝的页面时,它会将您重定向到登录页面。

你可以做几件事:

删除web.config中组的拒绝语句,然后执行以下两项操作之一:

使用loginview控件并在管理视图中封装“admin”角色的功能,然后向他们无权访问的“成员”角色显示消息。

和/或在页面加载事件上编写代码,以检查角色并显示消息和/或将用户重定向到另一个页面。

或者在web.config中为组AND保留deny语句

在登录页面的页面加载事件上执行类似

的操作
        If  Me.User.Identity IsNot Nothing and Me.User.Identity.Isauthenticated Then
          If Me.User.IsInRole("admin") Then
            Response.Redirect("~NoAccessToMemberStuff.htm")
          Else If Me.User.IsInRole("member") Then
            Response.Redirect("~/NoAccessToAdminStuff.htm")
          End If
    End If
相关问题