Битрикс: запрет на редактирование элементов инфоблока, созданных другими пользователями
9 Апреля 2015

Битрикс: запрет на редактирование элементов инфоблока, созданных другими пользователями

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

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

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

В этом нам поможет OnBeforeIBlockElementUpdate - событие возникает до изменения элемента инфоблока, и может быть использовано для отмены изменения или для переопределения некоторых полей.

В файле init.php, расположенного на сайте в /bitrix/php_interface/, пишем следующий код с проверкой на условие - если логин пользователя не равен создателю инфоблока и, если это не админ, то выводим сообщение и отменяем действие.

//если элемент инфоблока был создан другим пользователем, то запрещаем изменения
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("BlockEdit", "OnBeforeIBlockElementUpdateHandler"));

class BlockEdit
{
    // создаем обработчик события "OnBeforeIBlockElementUpdate"
    function OnBeforeIBlockElementUpdateHandler(&$arFields)
    {	
    	//делаем проверку, если логин не равен создателю инфоблока и, если это не админ, то выводим сообщение и отменяем действие
        if($GLOBALS["USER"]->GetID() !== $arFields["CREATED_BY"] && $GLOBALS["USER"]->GetID() !== "1")
        {
            global $APPLICATION;
            $APPLICATION->throwException("Вы не можете изменять элементы, созданные другими пользователями!");
            return false;
        }
    }
}

Комментарии

Использую в своей работе