Obtén permisos a nivel de objeto en una lista de SharePoint

Una forma de romper y reiniciar permisos en Sharepoint a nivel de objeto es usando Power Automate, el cual rompe la herencia de permisos por defecto y establece permisos únicos en cada objeto de lista.

Cuando trabajamos con listas de SharePoint, si damos permisos a cualquier usuario o grupo (como Leer, Contribuir o Control Total) entonces ese usuario o grupo tendrá acceso a poder manipular los objetos. Pero a veces puede que necesitemos limitar el acceso de usuarios para que solo puedan modifican los objetos que han creado.

Considerando escenarios reales, esto puede parecer un proceso manual incómodo considerando el volúmen de objetos para los cuales estos permisos deben ser dados de manera única a un conjunto específico de grupos de usuarios, ya que el comportamiento por defecto de cada objeto de lista es el de heredar el de su objeto padre (o sea, la lista).

 

    CREANDO LA SOLUCIÓN

Empezaremos creando la lista de SharePoint. Aquí tenemos un ejemplo para poder demostrar este caso de estudio y su solución. Empezaremos añadiendo una lista de SharePoint llamada a los Contenidos de Sitio. En esa lista añadiremos una columna de tipo Persona o Grupo.

Lo que intento aquí es asociar un usuario por cada objeto de contacto en la lista, a quien le será asignado acceso de Contribución al objeto por cada modificación en la lista de objetos. Las siguientes secciones demostrarán el proceso para alcanzar la solución por medio de Power Automate.

Ahora toca configurar el Flujo. Para ello iniciaremos sesión en nuestra cuenta de Office 365, luego iremos a Crear y vamos a crear un nuevo «Flujo Automatizado».

Iniciando el Flujo

Asignaremos un nombre al Flujo y seleccionaremos el activador como «When an item is created» y seguiremos los siguientes pasos:

 1. Señalaremos el activador de Flujo a la Dirección de Sitio de SharePoint y Lista de Nombre apropiada:

2. Usaremos un Compose (Redactar) para guardar la primera parte de nuestro Http Request, ya que lo usaremos demasiado.

Power Automate permisos Sharepoint

En mi caso, los valores son los siguientes.

_api/lists/getByTitle('Kickoffs')/items(@{triggerOutputs()?['body/ID']})

3. Añadiremos el nuevo paso como una acción «Send an HTTP request to SharePoint». Esta acción aquí romperá las herencias de permiso por defecto en el objeto de lista.

Power Automate permisos Sharepoint 1
NOTA: Dado que esta acción será usada varias veces en el proceso, renombraremos la acción para poder identificarla mejor.

Llenaremos los campos de arriba con lo siguiente:

  • Dirección de Sitio: Seleccionaremos la Dirección de Sitio tal y como hicimos en el paso anterior
  • Método: POST
  • URL: Introduciremos el siguiente texto.
@{outputs('Compose')}/breakroleinheritance(copyRoleAssignments=false,clearSubscopes=true)

Y para entender esta URL mejor, tenemos que:

  • «copyRoleAssignments» especifica si se copian las tareas de rol del objeto padre asegurable;
  • mientras que con el parámetro «clearSubscopes» establecido como true, la asignación de rol para los objetos hijo serán limpiadas y esos objetos heredarán asignación de rol del objeto actual luego de la llamada.

Usuarios permitidos por HTTP Sharepoint 

4. El siguiente paso será buscar todas las IDs de un objeto particular de esta lista para modificar su acceso a Contribuír. Para lograr esto, vamos a añadir otra acción «Send an HTTP request to SharePoint» y la renombraremos para no confundirla con la anterior.

Power Automate permisos Sharepoint 2

La Dirección de Sitio permanecerá igual. Ahora usaremos el método GET e introduciremos el siguiente texto como URI:

@{outputs('Compose')}?$select=Usuarios/Id&$expand=Usuarios

 4. Analizaremos(Parse) la salida JSON de la petición «Send an HTTP request to SharePoint – Get User List» usando la acción Parse JSON tal y como se muestra aquí:

Pegaremos el siguiente texto en el campo Schema. Este campo no es más que la estructura y semántica de salida del paso anterior.

{
    "type": "object",
    "properties": {
        "d": {
            "type": "object",
            "properties": {
                "__metadata": {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "string"
                        },
                        "uri": {
                            "type": "string"
                        },
                        "etag": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string"
                        }
                    }
                },
                "Manager": {
                    "type": "object",
                    "properties": {
                        "results": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "__metadata": {
                                        "type": "object",
                                        "properties": {
                                            "id": {
                                                "type": "string"
                                            },
                                            "type": {
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "Id": {
                                        "type": "integer"
                                    }
                                },
                                "required": [
                                    "__metadata",
                                    "Id"
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

5. Añadiremos otra acción «Send an HTTP request to SharePoint» para asignar los permisos requeridos a la ID de objeto específica.

Power Automate permisos Sharepoint 3

Método: POST
URI: Usaremos el siguiente texto.

@{outputs('Compose')}/roleassignments/addroleassignment(principalid=@{items('Apply_to_each')?['Id']},roledefid=1073741827)

En donde ‘PrincipalId’ es tomada de la ID de campo de la petición Parse JSON y ‘RoleDefId: 1073741827’ es la ID asociada con el permiso Contribuír. Nos referiremos a la siguiente lista para roles/accesos e IDs predefinidas asociadas para asignamientos por el requisito.

Permission Level Permission ID
Full Control1073741829
Read1073741826
Contribute1073741827

Y con esto el Flujo está listo para administar permisos a las listas de Sharepoint, todo con nuestro querido amigo Power Automate.

Cualquier duda nos leemos abajo.

Obtén permisos a nivel de objeto en una lista de SharePoint
Scroll hacia arriba