Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Текущая ситуация:

1. есть инфоблок с пользовательскими свойствами. например: S1,S2,S3

2. есть 2 группы пользователей. одна группа может менять свойства S1,S2 другая S1,S3 (поля, что не доступны - не должны быть отображены - о них пользователь знать не должен)

3. реализован механизм, который в файле "Файл с формой редактирования элемента" (настройка инфоблока) по определенным критерия определяет доступность полей для текущего пользователя и поля, запрещенные для изменения не выводятся в окно редактирования (используется стандартное окно битрикс для изменения сущностей в публичной части)

4. т.к. поля не были выведены на форму EDIT, то они, при сохранении, не попадают в массив POST, и по этой же причине значения свойств, которые не попали в массив, затираются в БД. Собственно, это указано в документации: https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/update.php (именно UPDATE вызывается ядром)

5. т..е если сначала пользователь 1 заполнит поля S1 и S2, нажмет сохранить, то это действие сотрет в БД значение поля S3, которое ранее мог внести пользователь 2. И наоборот - пользователь 2, нажимая сохранить удаляет значение свойства S2, если оно было ранее внесено пользователем 1.

Корректное поведение: не перетирать значения свойст в БД, доступ к которым запрещен.

Требуется корректное решение проблемы. Не интересует скрытие полней в HTML. Не интерсует изменение ядра и проч, костыли. Решение должно ложится в парадигму корректной работы с битрикс.

Вероятно, при сохранении, можно прочитать "оригинал" строки сущности, изъять оригинальные значения свойств, которые не доступны для корректировки, дополнить ими существующий в runtime ядра массив $PROPS, но здесь вопрос поддержки структуры массивов значений, т.к. поля могут быть любые: простые, списки, файлы - без ограничений.

Интересует или реализация, или детальный консалтинг по решению.

3 года назад
agrohoz
Игорь 
45 летБеларусь
3 года в сервисе
Был
3 года назад