我有一个基于表单的应用程序。该应用程序是使用登录控件生成的标准ASP.Net向导。根的web.config
似乎是为了基于表单的身份验证。我确实需要更改<roleManager>
元素才能使用type="System.Web.Security.SqlRoleProvider"
(而不是Windows令牌),每个How To: Use Role Manager in ASP.NET。ASP.Net:登录控制,LoginUser_LoggedIn和角色人口
我已经设置了三个角色 - 管理员,工程师,客户。有三个用户 - 管理员(admin),eddie(工程师)和cathy(客户)。我已经使用ASP.Net配置工具验证了用户及其角色。
每个角色在磁盘上都有自己的目录,每个角色都有自己的ASPX文件和“着陆页”集合。每个目录都有一个web.config
来限制对相关角色的访问。例如:
<location path="~/Engineers">
<system.web>
<authorization>
<allow roles="Engineers" />
<deny users="*"/>
</authorization>
</system.web>
</location>
成功登录后,我勾LoginUser_LoggedIn
写目标网址。我遇到的问题是用户的角色没有在登录时填充,所以我没有得到一个好的重定向。在下面的代码中,rolesArray
的大小为零。
任何想法?我应该从不同的角度来看待这个吗?
Private Sub LoginUser_LoggedIn(sender As Object, e As System.EventArgs) Handles LoginUser.LoggedIn
Try
Dim rolesArray() As String
rolesArray = Roles.GetRolesForUser()
Debug.Assert(rolesArray.Length > 0)
If (Roles.IsUserInRole("Administrators") = True) Then
LoginUser.DestinationPageUrl = "~/Administrators/Dashboard.aspx"
ElseIf (Roles.IsUserInRole("Engineers") = True) Then
LoginUser.DestinationPageUrl = "~/Engineers/Workspace.aspx"
ElseIf (Roles.IsUserInRole("Customers") = True) Then
LoginUser.DestinationPageUrl = "~/Customers/Dashboard.aspx"
Else
Debug.Assert(False)
End If
Catch ex As Exception
Debug.Print(ex.ToString)
End Try
End Sub
谢谢Brian。我刚刚发现User.IsAuthenticated对于登录用户来说是False的。奇怪的是,至少可以说。 – jww 2011-12-15 00:50:06