如何使用FORMS管理asp.net中的角色

时间:2011-05-04 07:32:43

标签: asp.net forms roles

所以我正在为我的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");

1 个答案:

答案 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文件中添加了权限。