En SharePoint, todos estamos familiarizados con niveles de permiso como Control total, Editar y Contribuir, etc. Utilizamos estos niveles de permiso para gestionar la accesibilidad a nivel de sitio/lista/elemento. A veces, creamos permisos personalizados para las necesidades del negocio. Estos permisos se definen en SharePoint con un identificador único que se llama "SharePoint Role Definition ID".
Para conocer el ID de los roles vamos a llamar la siguiente API: url_sitio/_api/web/roledefinitions. Esto va a devolver un XML donde podremos encontrar <Name> e <Id>, por ejemplo:
<entry>
<id>
https://.....sharepoint.com/sites/......./_api/Web/RoleDefinitions(1073741926)
</id>
<category term="SP.RoleDefinition" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<link rel="edit" href="Web/RoleDefinitions(1073741926)" />
<title />
<updated>
2023-09-20T21:06:24Z
</updated>
<author>
<name />
</author>
<content type="application/xml">
<properties>
<BasePermissions m:type="SP.BasePermissions">
<High m:type="Edm.Int64">
128
</High>
<Low m:type="Edm.Int64">
196615
</Low>
</BasePermissions>
<Description>
Can view, add, update, and delete list items and documents but not delete
</Description>
<Hidden m:type="Edm.Boolean">
false
</Hidden>
<Id m:type="Edm.Int32">
1073741926
</Id>
<Name>
Contribute not delete
</Name>
<Order m:type="Edm.Int32">
2147483647
</Order>
<RoleTypeKind m:type="Edm.Int32">
0
</RoleTypeKind>
</properties>
</content>
</entry>
Otro elemento que vamos a necesitar es el ID del grupo del sitio. Para conocer los grupos de un sitio podemos llamar la API url_sitio/_api/web/sitegroups. Dentro la respuesta encontraremos el nombre y el id único:
<entry>
<id>
https://......sharepoint.com/sites/....../_api/Web/SiteGroups/GetById(4)
</id>
<category term="SP.Group" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<link rel="edit" href="Web/SiteGroups/GetById(4)" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Owner" type="application/atom+xml;type=entry" title="Owner" href="Web/SiteGroups/GetById(4)/Owner" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Users" type="application/atom+xml;type=feed" title="Users" href="Web/SiteGroups/GetById(4)/Users" />
<title />
<updated>
2023-09-20T21:18:11Z
</updated>
<author>
<name />
</author>
<content type="application/xml">
<properties>
<Id m:type="Edm.Int32">
4
</Id>
<IsHiddenInUI m:type="Edm.Boolean">
false
</IsHiddenInUI>
<LoginName>
Visitatori di .....
</LoginName>
<Title>
Visitatori di .....
</Title>
<PrincipalType m:type="Edm.Int32">
8
</PrincipalType>
<AllowMembersEditMembership m:type="Edm.Boolean">
false
</AllowMembersEditMembership>
<AllowRequestToJoinLeave m:type="Edm.Boolean">
false
</AllowRequestToJoinLeave>
<AutoAcceptRequestToJoinLeave m:type="Edm.Boolean">
false
</AutoAcceptRequestToJoinLeave>
<Description m:null="true" />
<OnlyAllowMembersViewMembership m:type="Edm.Boolean">
false
</OnlyAllowMembersViewMembership>
<OwnerTitle>
Proprietari di .....
</OwnerTitle>
<RequestToJoinLeaveEmailSetting>
</RequestToJoinLeaveEmailSetting>
</properties>
</content>
</entry>
Entonces, si queremos el el grupo Visitantes del sitio (id: 4) tenga permisos solo de lectura (role id: 1073741926) para un elemento determinado de una lista:
Si en cambio queremos hacer lo mismo pero en un archivo:
La siguiente acción elimina todos los enlaces que dan acceso a un elemento o un archivo y elimina a todas las personas con acceso directo, excepto los propietarios.
La siguiente expresión puede resultar muy útil cuando necesitamos por ejemplo transformar una lista de direcciones de correo en una cadena delimitada por un caracter como punto y coma.
replace(cadena_multi_linea, decodeUriComponent('%0A'), ';')
{
"Name": FilenameWithExtension,
"ContentBytes": Get_file_content
}