Avatar billede lasserasch Juniormester
05. januar 2007 - 11:42 Der er 8 kommentarer og
1 løsning

Sætte Int32 værdi på forskellige ting ud fra resultat værdier.

Hejsa.


Jeg har 10 statiske INT32 værdier på min startop form.

Dem bruger jeg til at styre rettigheder i mit program.


Når jeg så starter mit program op laver jeg en forespørgelse til mit Active Directory. Jeg har så nogle grupper som alle starter med "R_". F.eks. "R_systemadministration" eller "R_regnskab" osv...

Jeg kan sagtens finde frem til om brugeren er medlem af en af disse grupper. Hvis brugeren er det, så skal jeg have sat de forskellige Int32 værdier til 1.
De er som standard alle sat til 0.

Navnene på Int32 værdierne er nøgagtig det samme som navnet på gruppen, som brugeren er medlem af.

Og her kommer spørgsmålet så :

Hvordan sætter jeg så den rigtige Int32 værdi til 1, alt efter hvilken gruppe brugeren blev fundet i?


Her er min kode indtil videre :

------------


// Security Settings

        public static String UserName;
        public static Int32 R_Intrahouse_Kalkulation;
        public static Int32 R_Intrahouse_Kalkulation_Admin;
        public static Int32 R_Intrahouse_Kampagneplaner;
        public static Int32 R_Intrahouse_Medarbejderlist;
        public static Int32 R_Intrahouse_Systemadministration;



            frm_main.UserName = Username;
            DirectoryEntry ADE1 = new DirectoryEntry("LDAP://domæne.dk/OU=Ressources, DC=skare,DC=com", "brugernavn", "password");
            DirectorySearcher ADS1 = new DirectorySearcher(ADE1);
            ADS1.Filter = "(&(objectCategory=group)(cn=R_Intrahouse*))";
            ADS1.SearchScope = SearchScope.Subtree;

            foreach (SearchResult res in ADS1.FindAll())
            {
                DirectoryEntry de;
                de = res.GetDirectoryEntry();
                object objMembers = null;
                objMembers = de.Invoke("Members");

                foreach (object objMember in (IEnumerable)objMembers)
                {
                    DirectoryEntry objUser = new DirectoryEntry(objMember);
                   
                    if (Convert.ToString(objUser.Properties["samAccountName"].Value).ToLower() == frm_main.UserName.ToLower())
                    MessageBox.Show ("Bruger medlem af gruppen : " + de.Properties["Name"].Value);
                }
            }

-------------



I kan se at til sidst i dette stykke kode, der udskriver jeg en messagebox med navnet på gruppen.

Jeg skal så på en eller anden måde have den til at sætte Int32 værdien som har samme navn som gruppen til en værdi på 1.


Hvordan gøres det?
Avatar billede -mundi- Nybegynder
05. januar 2007 - 11:47 #1
jeg ville smide alle dine ints i et hashtable med de forskellige grupper som key
Avatar billede lasserasch Juniormester
05. januar 2007 - 11:48 #2
Kan du give et eksempel?

/Lasse
Avatar billede -mundi- Nybegynder
05. januar 2007 - 11:52 #3
System.Collections.Hashtable h = new System.Collections.Hashtable();
h.Add("R_Intrahouse_Kalkulation", 0);
h.Add("R_Intrahouse_Kalkulation_Admin", 0);
h.Add("R_Intrahouse_Kampagneplaner", 0);
h.Add("R_Intrahouse_Medarbejderlist", 0);
h.Add("R_Intrahouse_Systemadministration", 0);


//// udklip af din kode

foreach (object objMember in (IEnumerable)objMembers)
                {
                    DirectoryEntry objUser = new DirectoryEntry(objMember);
                   
                    if (Convert.ToString(objUser.Properties["samAccountName"].Value).ToLower() == frm_main.UserName.ToLower())
                    MessageBox.Show ("Bruger medlem af gruppen : " + de.Properties["Name"].Value);
h[de.Properties["Name"].Value)]=1;
                }

//udtræk fra hashtable
(Int32)h["R_Intrahouse_Kalkulation"]
Avatar billede md_craig Nybegynder
05. januar 2007 - 12:02 #4
En lille side bemærkning, istedet ville jeg bruge flag, og hvis der ikke er meget mere i det så en enum...
Avatar billede lasserasch Juniormester
05. januar 2007 - 12:03 #5
Ok, forstår jeg det korrekt, hvis jeg så skal sætte mine ints til sidst ud fra hvad der ligger i min hashtable så?

Altså at jeg til sidst skal gøre sådan :

R_Intrahouse_Kalkulation =  (Int32)h["R_Intrahouse_Kalkulation"]
R_Intrahouse_Kalkulation_admin =  (Int32)h["R_Intrahouse_Kalkulation_admin"]

osv?
Avatar billede -mundi- Nybegynder
05. januar 2007 - 12:11 #6
ja, det kunne du gøre, eller også helt droppe dine Int32 og så bruge Hashtable istedet
Avatar billede crazysnap Seniormester
05. januar 2007 - 12:17 #7
Tror hele idéen med mundi's løsning er at implementere dine Int32 i en hashtable, i stedet for at have dem liggende som member-variable i en klasse.

så i stedet for:

public static Int32 R_Intrahouse_Kalkulation;
public static Int32 R_Intrahouse_Kalkulation_Admin;
public static Int32 R_Intrahouse_Kampagneplaner;
public static Int32 R_Intrahouse_Medarbejderlist;
public static Int32 R_Intrahouse_Systemadministration;

har du:

System.Collections.Hashtable h = new System.Collections.Hashtable();
h.Add("R_Intrahouse_Kalkulation", 0);
h.Add("R_Intrahouse_Kalkulation_Admin", 0);
h.Add("R_Intrahouse_Kampagneplaner", 0);
h.Add("R_Intrahouse_Medarbejderlist", 0);
h.Add("R_Intrahouse_Systemadministration", 0);


Når du så skal sætte en af variablene til 1 bruges f.eks.:

h["R_Intrahouse_Kalkulation"] = 1;


Og når du skal hive en ud:

Int32 RettighederTil_R_Intrahouse_Kalkulation = (Int32)h["R_Intrahouse_Kalkulation"];


Du kan så bruge mundi's foreach løkke eksempel til at sætte alle de retmæssige variable i hashtablen til 1.


- Snap
Avatar billede lasserasch Juniormester
05. januar 2007 - 12:25 #8
Ok, nice nok! Det funger perfekt! Har ikke lige arbejdet med hashtable komponenten endnu.... Så lærte jeg sgu også noget nyt idag!


Takker!
Avatar billede spif2001 Nybegynder
05. januar 2007 - 13:28 #9
Hvis du bruger .Net 2.0 kan du med fordel bruge en Dictionary i stedet for en hashtable.

System.Collections.Generic.Dictionary<string, Int32>

Så behøver du ikke typecaste hver gang du skal have værdier ud af listen, da den er type sikker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester