В некоторых случаях при работе рабочих процессов необходимо ограничить доступ к элементу списка для части пользователей.
Это можно сделать с помощью 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
Остальные параметры как в третьем шаге.