Controls einer Form finden



  • Hmm, irgendwie funktioniert es bei mir ... nur leider werden alle Controls .Enabled gesetzt?!
    Hab versucht ne pn zu schicken ... geht nicht 😞



  • Prüf am besten mal welche GUID's dir nach der Anmeldung aus der Datenbank zurück geliefert werden.

    Mir scheint es als hätte der Benutzer schon einmal alle Rechte, was eben dazu führt, dass alle Controls aktiv sind.



  • Für mich zum Verständnis:
    Ich hinterlege zunächst einmalig für jede Control eine Guid im Tag.
    Diese Guid bzw. verketteten Guids werden in der Datenbank gespeichert.

    Beim Start der Form wird dann geprüft ob der Nutzer adminGUID bzw. superAdminGUID ist und dementsprechend die hinterlegten Werte der Guid ausgelesen.

    Das ganze wäre ja für weitere Gruppen erweiterbar - indem weitere Guids verkettet werden?!



  • So in etwa. 🙂 Du musst nur drauf achten, dass du beim beenden die GUIDs irgendwo speicherst und beim nächsten start wieder lädst, sonst überschreibst du die GUIDs immer wieder.



  • Irgendwie klappt es noch nicht so recht. Für den "normalen" User werden die richtigen Controls angezeigt, für den "super" User aber eben nur die anderen, die der normale Nutzer nicht hat (aber eben nicht beides).

    Mit was fülle ich myGroups?

    Ach ja, noch ne Frage zu Deinem Code: Sollte groupIDs in der foreach-Schleife nicht auch GroupIDs heißen?

    string[] GroupIDs = guids.Split(new char[] {';'}...);
    
         foreach(string guid in groupIDs)
         {
             ctrl.Enabled = myGroups.Contains(guid);
         }
    


  • Ja, es sollte in der Schleife genau wie außerhalb heißen.

    "myGroups" - soll die GruppenID's enthalten, denen der Nutzer angehört. - Der Super-Admin hat also groupUser; groupAdmin; groupSuperAdmin.



  • Ich komme einfach auf keinen grünen Zweig ...
    Vermutlich übergebe ich die falsche Gruppe??

    Als SuperAdmin mit allen Rechten wird dann aber nichts angezeigt. 😕

    Hier mal mein Code - ich speicher der Einfachheit halber noch nichts in der DB.

    public partial class F_Guid : Form
        {
            string sGroup;
    
            public F_Guid()
            {
                InitializeComponent();
                GetGuid();
            }
    
    private void GetGuid()
            {
                var userGuid = Guid.NewGuid();
                var adminGuid = Guid.NewGuid();
                var superAdminGuid = Guid.NewGuid();
    
                sGroup = String.Concat(userGuid, ";", adminGuid, ";", superAdminGuid);
                //sGroup = String.Concat(adminGuid, ";", superAdminGuid);
                //sGroup = userGuid.ToString();
                //sGroup = adminGuid.ToString();
                //sGroup = superAdminGuid.ToString();
    
                SetTags(userGuid.ToString(), adminGuid.ToString(), superAdminGuid.ToString());
            }
    
    private void SetTags(string userG, string adminG, string superAdminG)
            {
                lbMasterData.Tag = String.Concat(userG, ";", adminG, ";", superAdminG);
                btnMasterData.Tag = String.Concat(superAdminG);
    
                GroupPolicy();
            }
    
    public void GroupPolicy()                     
            {
                ArrayList myGroups = new ArrayList() { sGroup } ;
    
                ArrayList myControls = DatabaseAdministration.GetAllControls(this);
                foreach (Control ctrl in myControls)
                {
    
                    string guids = ctrl.Tag.ToString();
                    string[] GroupIDs = guids.Split(new char[] { ';' });
    
                    foreach (string guid in GroupIDs)
                    {
                        ctrl.Enabled = myGroups.Contains(guid);
                    }
                }
            }
    


  • sGroup ist "guid;guid;guid" als string

    Dann hast Du:
    ArrayList myGroups = new ArrayList() { "guid;guid;guid" }

    und prüfst
    myGroups.Contains(guid)

    Das Contains bezieht sich auf die ArrayList (die sowieso scheiße ist) und die Arraylist
    enthält keine einzelnen GUID-Strings, sondern nur das konkatenierte Monster da oben.

    Bitte verwende den Debugger. Das hättest Du selbst innerhalb von 30 Sekunden rausfinden können,
    sobald der Debugger in der inneren foreach angekommen wäre



  • Ok, ich werde anstatt ArrayList List<T> benutzen.

    Habe nun in myGroups anstatt einen String die drei Guids übergeben => 3 Gruppen.
    Dennoch wird nicht richtig "ausgewertet".
    Mach ich mit der Zuweisung der Tags was falsch oder fehlt bei der Auswertung nochmal eine Abfrage auf die Gruppe.

    Entschuldige bitte, aber seh grad den Wald vor lauter Bäumen nicht mehr 😕



  • Ok. Ein Tipp:

    foreach (string guid in GroupIDs)
    {
    ctrl.Enabled = myGroups.Contains(guid);
    }

    Warum wird ctrl.Enabled hier mehrfach gesetzt?
    Also EIN- und DASSELBE ctrl.Enabled.


Anmelden zum Antworten