Итак, я создаю систему авторизации для моего сайта asp.net. Есть 3 разных типа пользователей. Я обнаружил, что FORMS может управлять ролями, поэтому я решил попробовать это.
В настоящее время у меня все работает с аутентификацией в FORMS, но без ролей. Я нашел этот кусок кода, который должен ограничить доступ к определенной странице. Но каждый может получить доступ к этой странице. что странно, потому что я никого не добавил к роли "участник". для начала я добавил только одну роль, чтобы увидеть, были ли люди заблокированы со страницы.
<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");