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