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.
