es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo usuarios anidados del sitio en SPFX

Necesito averiguar si el usuario actual es propietario de un sitio en spfx react. Por favor, encuentra a continuación el código que estoy usando actualmente:

const ownerGroupId = (await sp.web.associatedOwnerGroup()).Id;
const users = await sp.web.siteGroups.getById(ownerGroupId).users();
await sp.web.currentUser.get().then(async(user) => {
    if(users.some(r => r.Id==user.Id)) {
        console.log("Propietario del sitio");
    }
});

Pero el problema al que me enfrento es que los grupos de propietarios del sitio tienen grupos a los que el usuario actual pertenece. Necesito comparar los usuarios que están anidados dentro de los grupos de propietarios del sitio. Cualquier ayuda será muy apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para comparar los usuarios que están anidados dentro de los grupos de propietarios del sitio, puedes utilizar una función recursiva para verificar todos los grupos anidados en el grupo de propietarios:

    async function isSiteOwner() {
      const idGrupoPropietario = (await sp.web.grupoPropietarioAsociado()).Id;
      const grupoPropietario = await sp.web.gruposDeSitio.getById(idGrupoPropietario).expand('Usuarios').get();
      const usuarios = grupoPropietario.Usuarios;
      const usuarioActual = await sp.web.usuarioActual.select('Id').get();
    
      async function obtenerUsuariosAnidados(idGrupo) {
        const grupo = await sp.web.gruposDeSitio.getById(idGrupo).expand('Usuarios').get();
        const usuariosAnidados = grupo.Usuarios;
        const gruposAnidados = await sp.web.gruposDeSitio.getById(idGrupo).expand('Usuarios, Usuarios/Grupos').get();
        const usuariosGrupoAnidados = gruposAnidados.Usuarios;
        const idsGruposAnidados = usuariosGrupoAnidados.map(g => g.NombreUsuario.split('|')[1]);
        for (const grupo of gruposAnidados.Usuarios.Grupos) {
          idsGruposAnidados.push(grupo.NombreUsuario.split('|')[1]);
        }
        for (const idGrupo of idsGruposAnidados) {
          const usuariosGrupo = await obtenerUsuariosAnidados(idGrupo);
          usuariosAnidados.push(...usuariosGrupo);
        }
        return usuariosAnidados;
      }
    
      const idsGrupos = grupoPropietario.Usuarios.Grupos.map(g => g.NombreUsuario.split('|')[1]);
      for (const idGrupo of idsGrupos) {
        const usuariosGrupo = await obtenerUsuariosAnidados(idGrupo);
        usuarios.push(...usuariosGrupo);
      }
    
      return usuarios.some(u => u.Id === usuarioActual.Id);
    }
    
    isSiteOwner().then(resultado => {
      console.log(resultado ? 'Propietario del Sitio' : 'No es Propietario del Sitio');
    });
    

    Este código verificará todos los grupos anidados en el grupo de propietarios para encontrar cualquier usuario que coincida con el usuario actual. Si encuentra una coincidencia, devuelve true, indicando que el usuario actual es propietario del sitio. De lo contrario, devuelve false.

Comments are closed.