Добрый день!
Есть следующая задача: необходимо во время редактирования записи пользователем, не давать другим пользователем редактировать эту же запись или ее детали. Причем этот функционал должен быть универсальным, т.е. должна быть возможность включать его для любых разделов.
Есть идеи как это можно реализовать?
Версия 7.7.0.2107
Нравится
Иван, добрый день.
Функционал можно реализовать при помощи раздачи прав на пользователя/группу пользователей при изменении ответственного/группы ответственных в записи, используя элемент бизнес-процесса "Изменение прав доступа", т.е.:
1) Ловим сигнал изменения поля "Ответственный" в записи интересующего нас объекта;
2) Читаем данные о пользователе/группе пользователей в измененной записи;
3) Элементом "Изменение прав":
a. Удаляем все установленные права в измененной записи;
b. Добавляем права пользователю/группе пользователей, которые выбраны в поле "Ответственный"
Что-то вроде этого должно получиться. Если необходимы подробности для настройки элементов БП, то могу поделиться.
Спасибо, про раздачу прав процессом и изменение прав я в курсе.
Тут проблема в том, что запись должна быть закрыта для остальных в момент открытия записи и после сохранения права должны быть восстановлены. Т.е. сам механизм прав тут не очень подходит. Скорее нужен служебный объект, в котором будут хранится данные об открытых на редактирование записях разделов. А у же в карточке при сохранении придется проверять, есть ли она в списке. Пока ничего лучше не придумалось...
Иван,
такой подход будет очень сильно грузить систему во время создания и чтения прав. А если произойдёт аварийное закрытие страницы записи, то узнать об этом событии и обработать его едва ли удастся.
Поэтому в системе предусмотрен подход выбора ответственного, который позволяет однозначно указывать пользователя, в данный момент работающего с записью, а механизм раздачи прав бизнес-процессом придает этому подходу необходимую гибкость.