c# - Obtención de miembros de un grupo de dominio AD mediante Sharepoint API
dns sharepoint-2010 (2)
Sugeriría que solo consultara Active Directory directamente. Está gastando mucho esfuerzo para que SharePoint haga esta llamada a AD por usted. Cada cuenta que tenga acceso de Usuario de Dominio debería poder consultar los grupos de AD que ha anidado en SharePoint. Solo iría a la fuente.
De esta manera, no tiene que preocuparse por Examinar permisos de usuario o cualquier otra cosa. En mi opinión, tratar de proxy esto a través de SharePoint solo hace su vida más difícil.
En mi código Sharepoint, muestro una lista de todos los usuarios definidos a través de:
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
...
}
La gran parte es que puedo agregar un grupo de seguridad de dominio a un grupo Sharepoint (como Visitantes) agregando muchos usuarios a la vez (administración más simple). Pero mi código no ve a esos usuarios al menos hasta que inician sesión por primera vez (si tienen suficientes derechos). En este caso, solo puedo ver la instancia del objeto SPUser
grupo de seguridad del dominio con su IsDomainGroup
establecido en true
.
¿Es posible obtener miembros del grupo de dominio mediante Sharepoint sin recurrir a la consulta de Active Directory (que es algo que preferiría evitar porque probablemente necesite suficientes derechos para realizar tales operaciones = más administración: derechos de Sharepoint + derechos de AD).
Puede usar el método SPUtility.GetPrincipalsInGroup
( MSDN ).
Todos los parámetros son autoexplicativos, excepto la string input
, que es el nombre de la cuenta NT del grupo de seguridad:
bool reachedMaxCount;
SPWeb web = SPContext.Current.Web;
int limit = 100;
string group = "Domain//SecurityGroup";
SPPrincipalInfo[] users = SPUtility.GetPrincipalsInGroup(web, group, limit, out reachedMaxCount);
Tenga en cuenta que este método no resuelve los grupos de seguridad anidados. Además, se requiere que el usuario ejecutor tenga permiso de SPBasePermissions.BrowseUserInfo
información de usuario ( SPBasePermissions.BrowseUserInfo
) en la web actual.
Actualizar:
private void ResolveGroup(SPWeb w, string name, List<string> users)
{
foreach (SPPrincipalInfo i in SPUtility.GetPrincipalsInGroup(w, name, 100, out b))
{
if (i.PrincipalType == SPPrincipalType.SecurityGroup)
{
ResolveGroup(w, i.LoginName, users);
}
else
{
users.Add(i.LoginName);
}
}
}
List<string> users = new List<string>();
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
if (user.IsDomainGroup)
{
ResolveGroup(SPContext.Current.Web, user.LoginName, users);
}
else
{
users.Add(user.LoginName);
}
}
Editar:
[...] recurrir a la consulta de Active Directory (que es algo que preferiría evitar porque probablemente necesite suficientes derechos para realizar tales operaciones [...]
Eso es cierto, por supuesto, pero SharePoint también debe buscar el AD. Es por eso que se requiere que una cuenta de servicio de grupo de aplicaciones tenga acceso de lectura al AD. En otras palabras, debe ejecutar consultas de forma segura contra AD si ejecuta su código revertido a la cuenta de proceso.