Benutzerrollen mit GenericPrincipal()

r0cka

Grünschnabel
Hallo,

ich habe ein kleines Problem mit dem einem Login in ASP.NET.
Und zwar möchte ich nicht den eingebauten Login Wizard des VS benutzen und habe mir ein eigenes Login geschrieben. Dies funktioniert auch alles super, jedoch habe ich ein Problem mit den Rollen. Ich möchte gerne Bereiche per <location> node in meiner web.config deklarativ festlegen. Jedoch bekomme ich die Rolle nicht dem eingeloggten User zugeordnet. Nachfolgend der Code für den Login.

Code:
protected void cmdLogin_ServerClick(object sender, EventArgs e)
    {

        if (ValidateUser(txtUserName.Value, txtUserPass.Value))
        {
            string[] roles = new string[1];
            //Rolle des Users bestimmen
            string role = getRole(txtUserName.Value.ToString());
            //Rolle in Rollenarray speichern --> benötigt für Generic Principal
            roles[0] = role;

            //neues Authentitätsticket erzeugen;
            //Rolle des Benutzers wird in authTicket.userdata gespeichert
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
            DateTime.Now.AddMinutes(30), false, role);

            //Cookie verschlüsseln
            string cookiestr;
            cookiestr = FormsAuthentication.Encrypt(authTicket);

            HttpCookie ck;
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            Response.Cookies.Add(ck);
            
            FormsIdentity id = new FormsIdentity(authTicket);

            //Rollen als Array
            this.Context.User = new GenericPrincipal(id, roles);

            string strRedirect;
            strRedirect = Request["ReturnUrl"];
            if (strRedirect == null)
                strRedirect = "Default.aspx";
            Response.Redirect(strRedirect, true);
        }
        else
            Response.Redirect("Login.aspx", true);
    }

Wenn ich nach dem Login in einer andere Seite zum Testen mit isUserInRole("xyz") eine Kontrollstruktur anlege,
Code:
IPrincipal p = HttpContext.Current.User;

        if (p.IsInRole("Administrator"))
        {
            Label1.Text = "Admin";
        }
        else
            Label1.Text = "Nicht Admin";

so läuft diese immer in den else Zweig, obwohl die Rolle definitiv "Administrator" ist. Selbst wenn ich dem Array roles[] direkt die Rolle "Administrator" zuweise, funktioniert es nicht.

Woran könnte es liegen?

Danke für eure Hilfe
Philipp
 

r0cka

Grünschnabel
Hab es eben selbst geschafft.

Ich habe die global.asax verwendet und bin nach diesem Tutorial vorgegangen. Damit klappt es.

link

Danke trotzdem denjenigen, die sich Gedanken gemacht haben.

Philipp