Как управлять ролями в asp.net с помощью форм - PullRequest
2 голосов
/ 04 мая 2011

Итак, я создаю систему авторизации для моего сайта 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");

1 Ответ

1 голос
/ 04 мая 2011

Я уверен, что вы не добавили роли в 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.

...