Невозможно получить роль, используя Context.User.IsRole - PullRequest
1 голос
/ 12 июля 2011

Я пишу следующий код для доступа к странице, но это не работает для меня

if (User.Identity.IsAuthenticated)
    {
        if (Context.User.IsInRole("DistrictAdmin"))
        {
            if (!IsPostBack)
            {
            }
        }
        else
        {
            Response.Redirect("Default.aspx");
        }
    }
    else
    {
        Response.Redirect("Default.aspx");
    } 

Мой код проверки входа в систему

  string RoleTypeID;
    objLogin.UserName = txtUsername.Text;
    objLogin.Password = txtPassword.Text;

    if (objLogin.getRoles(out RoleTypeID))
    {
        Session["RoleID"] = RoleTypeID;
        FormsAuthenticationTicket oAuthTicket = new FormsAuthenticationTicket(1, txtUsername.Text, DateTime.Now, DateTime.Now.AddMinutes(20), false, RoleTypeID.ToString(), FormsAuthentication.FormsCookiePath);
        string encryptoAuthTicket = FormsAuthentication.Encrypt(oAuthTicket);


        HttpCookie oCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptoAuthTicket); // Name of auth cookie

        if (oAuthTicket.IsPersistent) oCookie.Expires = oAuthTicket.Expiration;

        HttpContext.Current.Response.Cookies.Add(oCookie);
        if (RoleTypeID == "DistrictAdmin" || RoleTypeID == "CampusAdministrator" || RoleTypeID == "LPACMember")
        {
            Response.Redirect("LEPstudentrecords.aspx");
        }
    }
    else
    {
        lblInvalid.Visible = true;
    }

и в моем web.config я установлен какследует

     <roleManager enabled="false" />
    <authentication mode="Forms">
  <forms loginUrl="Default.aspx"
timeout="20" />
</authentication>

    <sessionState mode="InProc" timeout="180"></sessionState>

Но я не могу получить роль, даже если он прошел проверку подлинности, может ли кто-нибудь сказать, что делать

Вот изображение после проверки подлинности, все становится правильно, но яневозможно получить доступ к этой странице

enter image description here

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Вы добавляете строку роли как 'UserData' к FormsAuthenticationTicket.Нет никакой магии, которая выведет это значение на роль.

Я предлагаю вам снова обратиться к документации.

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.formsauthenticationticket

См. http://www.codeproject.com/KB/web-security/formsroleauth.aspx дляпример без RoleManager.

0 голосов
/ 12 июля 2011

Это потому, что вы не настроили RoleManager. В вашем web.Config он отключен.

<roleManager enabled="false" />

Вам нужно использовать существующий RoleProvider или написать свой собственный.

Пример конфигурации

<roleManager enabled="true" defaultProvider="SqlRoleManager">
  <providers>
    <add name="SqlRoleManager" 
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="SqlRoleManagerConnection"
         applicationName="MyApplication" />
  </providers>
</roleManager>

Вот несколько ссылок о поставщиках ролей

RoleProvider

Реализация пользовательского поставщика ролей

...