2012-03-30 12 views
4

Ich wurde mit einer SharePoint-Arbeit beauftragt, die das folgende Szenario umfasst.Abrufen von Benutzerberechtigungen aus Active Directory in SharePoint-Gruppen

Die Benutzer befinden sich in einer Active Directory-Gruppe mit Berechtigungen, die in einigen Fällen direkt mit der AD-Gruppe verknüpft sind. In einigen Fällen wird die AD-Gruppe einer SharePoint-Gruppe zugewiesen.

Meine Frage ist, wie kann ich die Berechtigungen des SPUser überprüfen, wenn der Benutzer nicht direkt einer Gruppe/Berechtigung zugeordnet ist, aber tatsächlich in der Active Directory-Gruppe ist? Ich muss die Berechtigungsstufe des Benutzers überprüfen.

Zum Beispiel:

Benutzer: UserX gehören AD-Gruppe "SHAREPOINT_POWER_USERS" und diese Gruppe "Contribute" Berechtigungen hat und gehört zu einer Sharepoint-Gruppe "IT Support Group".

Wäre es möglich, dies programmatisch abzurufen, da der Benutzer nicht in erweiterten Berechtigungen oder in einer Sharepoint-Gruppe vorhanden ist? Kann ich darauf zugreifen, indem ich so etwas mache:

//Pseudocode to access groups 
SPUser user = SPContext.Current.Web.CurrentUser; 
SPGroupCollection collection = user.Groups; 

Bitte lassen Sie mich wissen, wie das funktioniert.

Danke.

Antwort

0

Sie gegen AD gehen könnten, sich direkt, das Gruppen-Mitglied erhalten, und wenn eine der Gruppen, die sie sind ein Mitglied der Erlaubnis zum Objekt hat, Sie die Berechtigung (dh das Objekt zeigen, etc.).

Versuchen: http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#39

public ArrayList Groups(string userDn, bool recursive) 
{ 
    ArrayList groupMemberships = new ArrayList(); 
    return AttributeValuesMultiString("memberOf", userDn, 
     groupMemberships, recursive); 
} 

public string AttributeValuesSingleString 
    (string attributeName, string objectDn) 
{ 
    string strValue; 
    DirectoryEntry ent = new DirectoryEntry(objectDn); 
    strValue = ent.Properties[attributeName].Value.ToString(); 
    ent.Close(); 
    ent.Dispose(); 
    return strValue; 
} 

public string GetObjectDistinguishedName(objectClass objectCls, 
    returnType returnValue, string objectName, string LdapDomain) 
{ 
    string distinguishedName = string.Empty; 
    string connectionPrefix = "LDAP://" + LdapDomain; 
    DirectoryEntry entry = new DirectoryEntry(connectionPrefix); 
    DirectorySearcher mySearcher = new DirectorySearcher(entry); 

    switch (objectCls) 
    { 
     case objectClass.user: 
      mySearcher.Filter = "(&(objectClass=user) 
     (|(cn=" + objectName + ")(sAMAccountName=" + objectName + ")))"; 
      break; 
     case objectClass.group: 
      mySearcher.Filter = "(&(objectClass=group) 
     (|(cn=" + objectName + ")(dn=" + objectName + ")))"; 
      break; 
     case objectClass.computer: 
      mySearcher.Filter = "(&(objectClass=computer) 
      (|(cn=" + objectName + ")(dn=" + objectName + ")))"; 
      break; 
    } 
    SearchResult result = mySearcher.FindOne(); 

    if (result == null) 
    { 
     throw new NullReferenceException 
     ("unable to locate the distinguishedName for the object " + 
     objectName + " in the " + LdapDomain + " domain"); 
    } 
    DirectoryEntry directoryObject = result.GetDirectoryEntry(); 
    if (returnValue.Equals(returnType.distinguishedName)) 
    { 
     distinguishedName = "LDAP://" + directoryObject.Properties 
      ["distinguishedName"].Value; 
    } 
    if (returnValue.Equals(returnType.ObjectGUID)) 
    { 
     distinguishedName = directoryObject.Guid.ToString(); 
    } 
    entry.Close(); 
    entry.Dispose(); 
    mySearcher.Dispose(); 
    return distinguishedName; 
}