所以我正在为我的asp.net网站创建一个登录系统。有3种不同类型的用户。我发现FORMS可以管理角色,所以我决定尝试这个。
我目前正在使用FORMS中的身份验证 - 但没有角色。我发现这段代码应该限制对特定页面的访问。但每个人仍然可以访问该页面。这很奇怪,因为我还没有将任何人添加到角色“成员”中。首先,我只添加了1个角色,以查看是否有人被阻止访问该网页。
<configuration>
<connectionStrings>
//EDITED
</connectionStrings>
<system.web>
<roleManager enabled="true" />
<customErrors mode ="Off">
</customErrors>
<authentication mode="Forms">
<forms name=".ASPXAUTH"
loginUrl="login.aspx"
protection="All"
timeout="30"
path="/">
</forms>
</authentication>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
</system.web>
<location path="RandomPage.aspx">
<system.web>
<authorization>
<allow roles="Member" />
<deny users="*" />
</authorization>
</system.web>
</location>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
将角色添加到FormsAuthenticationTicket的代码。 P.Userole包含字符串“Member”
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, //Ticket version
p.firstName, //username
DateTime.Now,
DateTime.Now.AddMinutes(30),
false, //true for persistant user cookie
p.userRole+"",
FormsAuthentication.FormsCookiePath);
string hashCookies = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
Response.Cookies.Add(cookie);
Response.Redirect("Default.aspx");
答案 0 :(得分:1)
我确信,您在成功登录后没有向FormsAuthenticationTicket
添加角色。它应该像......
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "UserId",
DateTime.Now, DateTime.Now.AddMinutes(30), false, "ListOfRolesCommandSeperate", FormsAuthentication.FormsCookiePath);
string hashCookies = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);
Response.Cookies.Add(cookie);
您需要将登录用户的角色传递给FormsAuthenticationTicket
才能使其正常运行。因为您刚刚在web.config文件中添加了权限。