13 septiembre, 2026

AUDITAR PERMISOS DE UNA LISTA DE SHAREPOINT

Hola a todos:

En esta ocasión vamos a crear un flujo de Power Automate que nos permita auditar los permisos de una lista de SharePoint directamente desde Power Apps.

Desde la aplicación indicaremos el nombre de la lista que queremos analizar y el flujo devolverá los usuarios y grupos que tienen permisos sobre ella, junto con el tipo de principal y el nivel de permiso asignado.

Además, filtraremos algunos grupos internos que SharePoint genera automáticamente, como los relacionados con Limited Access o SharingLinks, para que el resultado sea mucho más limpio y fácil de interpretar.

A continuación, os dejo los pasos del flujo:

Aquí os dejo las expresiones para que las podáis copiar y utilizar:

1. POWER APPS (V2)
   Acción real: Power Apps (V2)

Entrada:
NOMBRE_LISTA


2. OBTENER PERMISOS LISTA
   Acción real: Enviar una solicitud HTTP a SharePoint

Método:
GET

URI:
_api/web/lists/getbytitle('NOMBRE_LISTA')/roleassignments?$expand=Member,RoleDefinitionBindings


3. SELECCIONAR PERMISOS
   Acción real: Seleccionar

Desde:
body('OBTENER_PERMISOS_LISTA')?['d']?['results']

NOMBRE:
item()?['Member']?['Title']

LOGIN:
item()?['Member']?['LoginName']

EMAIL:
item()?['Member']?['Email']

TIPO:
if(
    equals(item()?['Member']?['PrincipalType'],1),
    'Usuario',
    if(
        equals(item()?['Member']?['PrincipalType'],4),
        'Grupo de seguridad',
        if(
            equals(item()?['Member']?['PrincipalType'],8),
            'Grupo de SharePoint',
            'Otro'
        )
    )
)

PERMISO:
first(
    item()?['RoleDefinitionBindings']?['results']
)?['Name']


4. FILTRAR GRUPOS SISTEMA
   Acción real: Filtrar matriz

Desde:
body('SELECCIONAR_PERMISOS')

Filtro:
@and(
    not(
        startsWith(
            item()?['NOMBRE'],
            'Limited Access System Group'
        )
    ),
    not(
        startsWith(
            item()?['NOMBRE'],
            'SharingLinks.'
        )
    )
)


5. FORMATEAR RESPUESTA
   Acción real: Componer

{
    "LISTA": "@{triggerBody()?['text']}",
    "TOTAL": @{length(body('FILTRAR_GRUPOS_SISTEMA'))},
    "PERMISOS": @{body('FILTRAR_GRUPOS_SISTEMA')}
}


6. RESPONDER A POWER APPS
   Acción real: Responder a una aplicación de Power Apps o flujo

Salida:
RESULTADO

Valor:
string(outputs('FORMATEAR_RESPUESTA'))

En Power Apps creamos un botón en el que vamos a incluir la llamada al flujo para que lo ejecute y poder traer la información a una colección:

Set(
    varRespuesta;
    AUDITARPERMISOSDEUNALISTADESHAREPOINT.Run(
        txtLista.Text
    ).resultado
);;

Set(
    varJSON;
    ParseJSON(varRespuesta)
);;

ClearCollect(
    colPermisos;
    ForAll(
        Table(varJSON.PERMISOS);
        {
            NOMBRE: Text(Value.NOMBRE);
            LOGIN: Text(Value.LOGIN);
            EMAIL: Text(Value.EMAIL);
            TIPO: Text(Value.TIPO);
            PERMISO: Text(Value.PERMISO)
        }
    )
)

Cuando recibamos la información ya la vamos a poder mostrar en una galería especificando todos los campos. En este caso, es interesante ver que existen usuarios y grupos de seguridad con acceso limitado:

Además podemos añadir otros elementos que nos puedan interesar y que yo he eliminado para no cargar de ruido el post.

Espero que sea de utilidad.

Comparte este post

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies