2008-11-28 37 views
10

¿alguien puede mostrarme cómo obtener los usuarios dentro de cierto grupo usando sharepoint?obtener usuarios por grupo en sharepoint

entonces tengo una lista que contiene usuarios o grupos. Quiero recuperar todos los usuarios en esa lista. ¿Hay alguna forma de diferenciar si el elemento de la lista es un grupo o usuario? si es un grupo, necesito obtener todos los usuarios dentro de ese grupo.

im utilizando C#, y estoy tratando de hacer las cosas pequeñas por lo que es una aplicación de consola.

im nuevo para compartir y estoy realmente saltando al fondo de la piscina aquí, cualquier ayuda sería muy apreciada.

aplausos ..

+2

¿Está hablando de grupos de SharePoint o Active Directory? – Nico

Respuesta

14

La primera cosa que hay que saber es que cuando se tiene una lista con un campo de usuario/grupo debe ser consciente de su tipo. Cuando tiene un usuario o grupo dentro del valor del elemento, el tipo de campo es SPFieldUserValue. Sin embargo, si el campo tiene múltiples selecciones de usuario/grupo, el tipo de campo es SPFieldUserValueCollection.
Vamos a suponer que su campo permite que una sola selección de usuario/grupo y ya tiene los siguientes objetos:

SPSite site; 
SPWeb web; 
SPListItem item; 

Ahora, vamos a comprobar el valor del campo para un usuario/grupo y recuperar una lista de usuarios, independientemente de qué tipo es (el nombre del campo es "Usuarios").

SPFieldUserValue usersField = new SPFieldUserValue(mainWeb, item["Users"].ToString()); 
bool isUser = SPUtility.IsLoginValid(site, usersField.User.LoginName); 
List<SPUser> users = new List<SPUser>(); 

if (isUser) 
{ 
    // add a single user to the list 
    users.Add(usersField.User); 
} 
else 
{ 
    SPGroup group = web.Groups.GetByID(usersField.LookupId); 

    foreach (SPUser user in group.Users) 
    { 
     // add all the group users to the list 
     users.Add(user.User); 
    } 
} 

Espero que te ayude.

Tks,
Pedro José Batista

+0

Como Sergey Turin dice a continuación, es mejor usar SiteGroups porque web.Groups solo devuelve aquellos grupos con derechos a la web a la que se hace referencia. –

+0

parece que tiene un error en la línea "users.Add (user.User);". Como "usuario" ya es un objeto SPUser, puede agregarlo directamente a la Lista: users.Add (user); – Patric

+0

¿Dónde ejecuto esto? ¿Debo poner esto en un archivo .js y ejecutarlo desde mi consola o algo así? – Batman

5

nota: un objeto SPUser también puede ser un grupo de anuncios (es decir, puede existir un objeto SPUser para los "usuarios del dominio \ Domain" ... razón por la cual el objeto SPUser también contiene el IsDomainGroup propiedad.

partir de esta información se puede empezar a recorrer a través de grupos de AD utilizando los objetos SPPrincipalInfo ... sin embargo no siempre es agradable.

Una cosa vale la pena tener en cuenta es que la El objeto SPGroup incluye la propiedad ContainsCurrentUser que puede atravesar grupos AD ... sin embargo, esto supone que tienes un objeto SPGroup para trabajar.

Disfrútalo.
-Scott

0

Esto es mejor utilizar web.SiteGroups en lugar de web.Groups como grupo podría ser heredada por ese sitio.

0
private bool IsMember() 
    { 
     bool isMember; 
     SPSite site = new SPSite(SiteURL); 
     SPWeb web = site.OpenWeb(); 
     isMember = web.IsCurrentUserMemberOfGroup(web.Groups["GroupName"].ID); 
     web.Close(); 
     site.Close(); 
     return isMember; 
    } 
+0

Eso no es exactamente lo que pidió el OP. Quería enumerar a todos los miembros de un grupo no para verificar si la cuenta Xy pertenece a un grupo específico. – Patric

Cuestiones relacionadas