Benutzerverwaltung in einer WPF Anwendung realisieren

shooter

Grünschnabel
Hallo zusammen,

ich stehe gerade vor einem Problem und zwar muss ich eine Roellen basierende Benutzerverwaltung in meiner WPF Anwendung realisieren!

Ich habe das ASP.Net hierzu verwendet!

Jetzt habe ich das Problem, dass wenn ich den aktuellen thread nach der Rolle abfrage bekomme ich nur dann eine korrekte Antwort wenn ich die Anmeldung mit einem Button starte wenn ich es aber mit einem MenuItem starte geht es nicht!

Ich werde zwar angemeldet aber es wird so wie es aussieht der principal nicht actualisiert!

Kann mir da jemand helfen, bzw. eine andere bessere Möglichkeit geben diese Aufgabe zu verwirklichen?

Gruß
Shooter
 
Hallo,

nein es ist keine Web Anwendung!

Ich habe nur das ASP.Net zur benutzerverwaltung benutzt, aber das ist nicht so ganz das, was ich haben will!

Weil ich kann keine neuen Benutzer von meinem Programm aus anlegen nur über die Web Site als Admin!

Welche Möglichkeiten gibt es da noch, die jedem neu erzeugten Thread und dem Threadpool die aktuelle Rolle zuweisen?

Gruß
Shooter
 
Das was du willst ist eine eigene Userverwaltung, losgelöst vom ASP.NET Mechnismus. Schließlich willst du das ja über deine Anwendung abdecken.

D.h. du brauchst entsprechende Entitäten für die Abbildung von Benutzern und Rollen. Idealerweise implementierst du die Schnittstelle IPrincipal. Damit kannst du den Benutzer auch in System.Threading.Thread.CurrentPrincipal setzen und hast damit deinen Benutzer über die Laufzeit deines Threads immer zur Verfügung.

Dafür muss du jedoch auch eine eigene Datenbank für die Daten verwenden. Wie du deine Benutzer und Rollen dann verwaltest .. entweder über deine Anwendung, oder ein eigenes Verwaltungstool. Das ganze ASP.NET Zeugs solltest du entfernen, da du hier zwei Welten miteinander verbandeln möchtest, was aus meinem aktuellen Wissensstand keinen Sinn ergibt.
 
Ja diese IPrincipal Schnittstelle habe ich auch schon inbetracht gezogen, aber wenn der currentprincipal gesetzt wird muss das Programm geschlossenwerden und wieder geöffnet werden, bevor dieser wieder geändert werden kann!

Da ansonsten das Programm nicht mehr will! :)

Deswegen bin ich auf das ASP.NET gestoßen! Ich habe auch eine Idee gehabt wie ich das trotzdem mit der IPrincipal lösen kann aber habe gerade keine Zeit um dies zu versuchen!

Also bei meiner Anwendung müssen sich zur Laufzeit immer verschiedene Personen mit verschiedenen Rollen an und abmelden können! Und die ganzen Threads müssen mit der jeweiligen Rolle verbunden werden so zu sagen!

Vielleicht hast du ja auch noch ne Idee wie ich das lösen kann?

Gruß
Shooter
 
Ja diese IPrincipal Schnittstelle habe ich auch schon inbetracht gezogen, aber wenn der currentprincipal gesetzt wird muss das Programm geschlossenwerden und wieder geöffnet werden, bevor dieser wieder geändert werden kann!

Stimmt doch nicht.

Eine einfache, furchtbare Test-Variante als Konsolen-Anwendung:

Code:
public class Identity : IIdentity
{
    private string name;

    public Identity(string name)
    {
        Name = name;
    }

    #region IIdentity Members

    public string AuthenticationType
    {
        get { return "Custom"; }
    }

    public bool IsAuthenticated
    {
        get { return true; }
    }

    public string Name
    {
        get { return name; }
        private set { name = value; }
    }

    #endregion
}

public class User : IPrincipal
{
    private Identity identity;

    public User(string user)
    {
        identity = new Identity(user);
    }

    #region IPrincipal Members

    public IIdentity Identity
    {
        get { return identity; }
        private set { identity = (Identity)value;}
    }

    public bool IsInRole(string role)
    {
        return true;
    }

    #endregion
}
class Program
{
    static void Main(string[] args)
    {
        User user1 = new User("user1");
        User user2 = new User("user2");

        Thread.CurrentPrincipal = user1;
        Console.WriteLine(Thread.CurrentPrincipal.Identity.Name);
        Thread.CurrentPrincipal = user2;
        Console.WriteLine(Thread.CurrentPrincipal.Identity.Name);

        Console.ReadKey();
    }
}

Der Output dazu:

Code:
user1
user2

Das beweist, dass die Änderung zur Laufzeit funktioniert. Wäre ja auch schlimm, wenn das anders wäre.
 
Sorry ich habe mich verlesen gehabt! :)

Das was du meinst bezieht sich auch nur auf den einen Thread in dem du dich ja befindest, aber die Threads im Threadpool sind nicht davon betroffen!

Gut ich müsste mir überlegen ob ich es benötige, den Threads im Threadpool die Rolle zu zuweisen!

Eine Möglichkeit ist es mit der AppDomain.courrentDomain.... hier kann mann für alle erzeugten Threads einen Principal vorgeben und ebenso für den Threadpool der dieser Domain zugehört und diesen kann man nur einmalig zur Laufzeit verändern! :)

Aber wie gesagt ich muss überprüfen ob es notwendig ist, die anderen Threads bzw. dem Threadpool immer eine neue Rolle zuzuweisen!

Gruß
Shooter
 
Grob gesagt sammle ich Daten von mehreren Servern und lege sie in einer Datenbank ab!

Und da verwende ich auch den Threadpool, aber wie gesagt muss ich überprüfen, ob ich über all die gleiche Rolle benötige oder ob es ausreichend ist nur die Rolle vom Heuptthread zu verändern!

Aber grundsätzlich, hast du ne andere Idee wie man das mit dem Threadpool auch schaffen könnte würde mich jetzt einfach interressieren! :)

Gruß
Shooter
 

Neue Beiträge

Zurück