Изменение прав доступа к элементу списка в SharePoint 2013 через HTTP REST в рабочем процессе.

В некоторых случаях при работе рабочих процессов необходимо ограничить доступ к элементу списка для части пользователей.

Это можно сделать с помощью HTTP запросов из конструктора Sharepoint Designer.

Первый шаг. Создаем словарь с двумя переменными. (это обязательно для всех HTTP запросов)

Accept : Строка : application/json;odata=verbose

Content-Type : Строка : application/json;odata=verbose

Второй шаг. Вставляем “Этап приложения”

Третий шаг. Делаем HTTP запрос для снятия наследования прав с конкретного элемента списка.

Вставляем действие “Вызов веб-службы HTTP” в этапе приложения. В поле “это” вводим следующую строку (url):

[%Контекст рабочего процесса: URL-адрес текущего сайта%]_api/web/lists/getbyTitle(‘[%Контекст рабочего процесса: Имя списка%]’)/items([%Текущий элемент:ИД%])/breakroleinheritance(copyRoleAssignments=false, clearSubscopes=true)

Все, что в квадратных скобках – переменные, вставленные через “Добавить или изменить подстановку”. Строка без переменных : http://<SP_site>/_api/web/lists/getbyTitle(‘<Имя списка>’)/items(<ИД элемента списка>)/breakroleinheritance(copyRoleAssignments=false, clearSubscopes=true)

Метод HTTP выбираем HTTP POST

Далее в свойствах действия в параметре “”RequestHeaders” выбираем ранее созданный словарь. В параметрах “ResponseContent” и “ResponseHeaders” создаем пустые словари. Например так.

Четвёртый шаг. Создаем еще один “Этап приложения” (можно делать все в одном этапе).

Пятый шаг. Выдаем разрешения. Вставляем действие “Вызов веб-службы HTTP”  в поле “это” (url) вводим следующую строку

[%Контекст рабочего процесса: URL-адрес текущего сайта%]_api/web/lists/getbyTitle(‘[%Контекст рабочего процесса: Имя списка%]’)/items([%Текущий элемент:ИД%])/roleassignments/addroleassignment(principalid=4,roleDefId=1073741829)

Разберем данную строку.

principalid=4 – ID группы или пользователя которому вы хотите предоставить определенные права.

roleDefId=1073741829 – ID разрешений сайта.

Как нам определить данные ID.

Для определения roleDefId можно обратиться к странице сайта по адресу http(s)://<SP_Site>/_api/web/roledefinitions в ответ вы получите XML со списком и ID разрешений сайта.

Некоторые ID

1073741829 – полный доступ

1073741927 – только просмотр

Для определения principalid я просто в параметрах сайта в “Пользователи и группы” заходил на нужную группу и в адресной строке смотрел параметр MembershipGroupId. Если нужно дать права для пользователя, то его ID можно определить следующим образом. Делаем запрос http(s)://<SP_Site>/_api/web/siteusers?$select=Id&$filter=Email eq “<user email>” и смотрим параметр GetUserById.

Далее выбираем метод HTTP – HTTP POST, и заполняем остальные параметры как в третьем шаге.

Для каждой группы или пользователя необходимо создавать свой HTTP запрос.

 

Восстановление прав.

Для восстановления прав на элемент необходимо восстановить наследование. Для этого опять же делаем HTTP запрос в “Этап приложения” метод HTTP POST.

Строка запроса:

[%Контекст рабочего процесса: URL-адрес текущего сайта%]_api/web/lists/getbyTitle(‘[%Контекст рабочего процесса: Имя списка%]’)/items([%Текущий элемент:ИД%])/resetroleinheritance

Остальные параметры как в третьем шаге.

 

 

Источник.