lol - auf den LDap Trick bin ich noch nicht gesto�en ;-)

Einfaches nachschauen - ob ein User Member einer Gruppe geht �ber das isMember Objekt 
der Gruppe.
Das habe ich aber bisher nur unter ASP gemacht - und somit nicht als ASP.Net da.

Grunds�tzlich l�uft das so:

' Holen des ADsPath - einmalig um Performance zu verbessern
DIM rootDSE, strADsPath, strExternGroup
Set rootDSE = GetObject("LDAP://rootDSE";)
strADsPath = "LDAP://"; & rootDSE.Get("defaultNamingContext")
strExternGroup = "LDAP://CN=GruppenName,OU=OUName,DC=Dom�ne,DC=de";


        ' Holen des Namens aus der DB + Schauen nach Mitgliedschaft
        
'-------------------------------------------------------------------------------------
                PUBLIC PROPERTY GET ADS_Name(Nutzer)
                        IF NOT Nutzer = "" OR NOT isNULL(Nutzer) THEN
                                
                                DIM LDaten, oRecordSet, VariantName, Wert, strUpn, 
oConnection, strQuery
                                
                                'TO DO : Change the UPN to fit your environment
                                
                                LDaten = SPLIT(Nutzer,"\")
                        
                                'TO DO : Change the UPN to fit your environment
                                IF INSTR(Nutzer,"\")<>0 THEN
                                        strUPN = LDaten(1)
                                ELSE
                                        strUPN = "*"&Nutzer&"*"
                                END IF
                        
                                Set oConnection = CreateObject("ADODB.Connection")
                                Set oRecordset = CreateObject("ADODB.Recordset")
                                oConnection.Provider = "ADsDSOObject"  'The ADSI 
OLE-DB provider

                                oConnection.Open "ADs Provider"
                                strQuery = "<" & strADsPath & 
">;(&(objectClass=user)(objectCategory=person)"
                                strQuery = strQuery & "(sAMAccountName=" &strUPN& "))"
                                strQuery = strQuery & ";name"
                                strQuery = strQuery & ",ADsPath"
                                strQuery = strQuery & ";subtree"
                                Set oRecordset = oConnection.Execute(strQuery)
  

                                DIM AdsPath_usr, gefunden
                                gefunden = 0

                                Do Until oRecordset.EOF
                                        gefunden = 1
                                        'ON ERROR RESUME NEXT
                                        
                                        FOR Feldtyp = 0 TO 1
                                                VariantNAME = 
oRecordSet.Fields(Feldtyp).Value
                                                IF NOT isNULL(VariantName) THEN
                                                        IF isArray(VariantName) THEN
                                                                FOR Counter = 0 TO 
UBOUND(VariantName)
                                                                        Wert = 
VariantName(Counter)
                                                                NEXT
                                                        ELSE
                                                                Wert = VariantName
                                                        END IF
                                                END IF
                                                SELECT CASE Feldtyp
                                                        CASE 0
                                                                Mi_Name = Wert
                                                        CASE 1
                                                                ADsPath_usr = Wert
                                                END SELECT
                                        NEXT
                                        IF gefunden = 1 THEN
                                                Dim grp
                                                Set grp = GetObject(strExternGroup)
                                                istExtern = grp.isMember(AdsPath_usr)
                                        END IF

                                'ON ERROR GOTO 0
                                oRecordset.MoveNext
                                Loop
                                
                        END IF
                END PROPERTY

So sah das unter ASP aus. Er sucht also den User -> holt von dem den ADsPath -> holt 
das Gruppenobjekt �ber seinen LDAP Path -> und checkt dann �ber Methode:
Gruppe.isMember(AdsPath des Users) -> was ein Boolean wiedergibt.

Ich denke - das Beispiel kann man sicher recht einfach in C# umwandeln.

F�r Mehrfachverschachtelung - geht das auch - wobei man dann eine rekursive Schleife 
aufbauen mu�!
Eine andere Idee ist nat�rlich einen

try {}
catch {}

Block aufzurufen. Einfach eine Sache probieren - die der User nur darf wenn er in der 
Gruppe ist - und wenn er es nicht ist - �ber den Catch Block die Auswertung machen. 
Ist auf jeden Fall schneller und einfacher zu bewerkstelligen.

MfG Andreas

-----Urspr�ngliche Nachricht-----
Von: Gerald B�ck [mailto:[EMAIL PROTECTED]]
Gesendet: Donnerstag, 26. September 2002 14:00
An: aspDEdotnet
Betreff: [aspdedotnet] AW: Active Directory Logon <-> Name


Danke, das hat mir schon sehr weitergeholfen und klappt super. Eine Frage hab ich noch 
dazu:

gibts eine m�glichkeit auf einfache weise auszulesen, ob ein user mitglied einer 
bestimmten gruppe ist? Die gruppen k�nnen aber auch verschachtelt sein. Vielleicht 
gibts da ja einen LDAP Trick!-)

thx
Gerald.

-----Urspr�ngliche Nachricht-----
Von: Pessner, Andreas [mailto:[EMAIL PROTECTED]]
Gesendet: Donnerstag, 26. September 2002 08:54
An: aspDEdotnet
Betreff: [aspdedotnet] AW: Active Directory Logon <-> Name


Relativ Einfach!

Soweit ich wei� ist der LogonName - der selbe Eintrag im AD Feld: "sAMAccountName" nur 
ohne Dom�nenk�rzel.

        private SearchResultCollection LdapRes(string LogonName)
                {
                        // Bereinigen des Dom�nenNamens - falls erforderlich
                        int Stelle;
                        string LName = LogonName;
                        Stelle = LName.IndexOf("\\");
                        if (Stelle != -1)
                        {
                                LName = LName.Remove(0,Stelle+1);
                        }
                
        
                        DirectoryEntry de = new 
DirectoryEntry("LDAP://ServerName/DC=Dom�ne,DC=de";);

                        // Parameter die geholt werden sollen
                        DirectorySearcher src = new DirectorySearcher(de);
                        src.Filter = 
"(&(objectCategory=Person)(objectClass=user)(sAMAccountName=" + LName + "))";
                        src.PropertiesToLoad.Add("cn");
                        src.PropertiesToLoad.Add("givenName");          // Vorname
                        src.PropertiesToLoad.Add("middleName");         // 2. Vorname
                        src.PropertiesToLoad.Add("sn");                 // Nachname
                        // sAMAccountName ist im Moment noch nicht implementiert! Man 
kann ihn zwar mit aufrufen
                        // bekommt aber keine Werte daraus geliefert!
                        // Fehlermeldung: "Handling of this ADSVALUE type is not yet 
implemented (type = 0xb)."
                        // src.PropertiesToLoad.Add("sAMAccountName");

                        // Sortierung
                        SortOption so = new SortOption();
                        so.Direction = SortDirection.Descending;
                        so.PropertyName = "name";
                        src.Sort = so;

                        src.SearchRoot = de;
                        src.SearchScope = SearchScope.Subtree;

                        // Jetzt hat man eine SearchResultCollection - in der alle 
Daten �hnlich ASP RecordSets enthalten sind.
                        SearchResultCollection resCol = src.FindAll();
                                        
                        return resCol;  
                }

So - ich hoffe das war ausf�hrlich genug.

-----Urspr�ngliche Nachricht-----
Von: Gerald B�ck [mailto:[EMAIL PROTECTED]]
Gesendet: Mittwoch, 25. September 2002 18:10
An: aspDEdotnet
Betreff: [aspdedotnet] Active Directory Logon <-> Name


Wie kann ich aus dem Active Directory aus einem bekannten Logon den Namen des Users 
rauskriegen also zB ich wei� dass ich mich mit g.baeck einlogge. Wie krieg ich aus dem 
AD raus, dass mein Name oder CN "Gerald B�ck" ist?

thx
Gerald.

| [aspdedotnet] als [EMAIL PROTECTED] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp

| [aspdedotnet] als [EMAIL PROTECTED] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp

| [aspdedotnet] als [EMAIL PROTECTED] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp

| [aspdedotnet] als [email protected] subscribed
| http://www.dotnetgerman.com/archiv/aspdedotnet/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.dotnetgerman.com/listen/aspDEdotnet.asp

Antwort per Email an