Бизнес-процессы и права доступа

Как известно, бизнес-процессы являются довольно-таки сложным функционалом с точки зрения разработки, поэтому если Вам необходимо реализовать ограничение прав доступа для бизнес-процессов в разделе "Администрирование" подобно тому, как это сделано для других разделов, то к сожалению, реализация подобной функциональности не представится возможной стандартными средствами конфигурации приложения Terrasoft CRM.

Но в качестве альтернативного варианта решения поставленной задачи раздачи прав доступа на бизнес-процессы могу предложить реализацию ограничения прав доступа к бизнес-процессу посредством скрипта. А именно, перед запуском бизнес-процесса реализовать проверку того, в какую группу входит текущий пользователь и после этого реализовать условие: если например в группу пользователей "Менеджеры" - то запретить запуск процесса, если же в группу "РП" - то разрешить запуск. Причем хотим обратить Ваше внимание на то, что группы "Менеджеры" и "РП" должны быть созданы в разделе "Администрирование" рабочего приложения.

Вся информация о принадлежности пользователя к группе находится в сервисах UserInGroup. Для реализации необходимого функционала требуется внести изменения в запрос на выборку sq_UserInGroup. А именно:
1. добавить новый параметр по контакту с типом "Уникальный идентификатор".
2. затем добавить связь с таблицей tbl_AdminUnit по контакту .
3. добавить новый фильтр по этому контакту tbl_AdminUnit.UserContactID = Parameter:ContactID[Уникальный идентификатор].

Сперва Вам необходимо получить значение текущего пользователя. Это можно сделать при помощи Connector. Затем неообходимо открыть датасет ds_UserInGroup, применить фильтр по группе и контакту. В результате работы фильтра мы должны получить количество записей в открытом датасете. В том случае если количество записей равно 1 (то есть этот текущий пользователь принадлежит указанной группе), то скрывать закладку.

Программно все вышесказанное может быть реализовано примерно следующим образом:

var ContactID = Connector.CurrentUser.ContactID      //получаем текущего пользователя.
var Dataset = Services.GetNewItemBuUSI ('ds_UserInGroup');    // получаем датасет
ApplyDatasetFilter (название фильтра,'параметр ContactID');
ApplyDatasetFilter (название фильтра, 'параметр GroupID');
Dataset.Open;        //открываем датасет после применения фильтра
if Dataset.RecordsCount ==1;   // проверяем количество записей

Далее Вам нужно прописать название необходимого Вам процесса и возможность его запуска или незапуска. Все вышесказанное Вы можете прописать в скриптах раздела "Процессы" на необходимом Вам действии или в обработчиках событий тех элементов, по нажатии на которые вызывается запуск процесса (нажатие кнопки или действия).

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

0 комментариев
Показать все комментарии