Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как разрешить доступ на редактирование одной статьи инфоблока?

00 голосов
5
Добрый день.

Каким образом можно разрешить пользователю, состоящему в группе с ID=5, редактировать только один конкретный элемент инфоблока documets_topic (ELEMENT_ID=74)?

И как вообще должно появляться редактирование? Пробовал разрешить этой группе доступ к странице "W" или даже "X" через .access.php — ничего не поменялось.
Пробовал разрешить доступ группе 5 к инфоблоку с уровнем "изменение" по ссылке
Цитата
/bitrix/admin/iblock_edit.php?type=documents&tabControl_active_tab=edit4&lang=ru&ID=9&admin=Y

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

Как быть?
спросил 21 Июль, 13 от Daltazar (280 баллов)

5 Ответы

00 голосов
Вроде как права на инфоблоки распространяются, а не на элементы...
ответил 21 Июль, 13 от ranger (900 баллов)
00 голосов
Нельзя давать права на элементы. Можно в компоненте заложить возможность редактирования, если элемент привязан к какому-то пользователи или если его просматривает автор.
ответил 15 Сен, 13 от Eddie (2,060 баллов)
00 голосов
Дмитрий, именно это мне и нужно. Не подскажите, если не трудно, как это реализовать? Где допиливать?
ответил 13 Дек, 13 от Daltazar (280 баллов)
00 голосов
Вкратце, логика такая. Будем, например, хранить право на изменение в $arResult['EDIT']=false;
Пусть имеется множественное свойство "USER", означающее право пользователя редактировать элемент, тогда запрос с фильтром по нему даст хотя бы один результат, что будет означать разрешение на редактирование:
Код
$rs=CIBlockElement::GetList(array(), array('IBLOCK_ID'=>$iblock_id,'ID'=>$id,'PROPERTY_USER'=>$USER->GetID()), false, array('nTopCount'=>1), array());
if($ar=$rs->GetNext()) $arResult['EDIT']=true;

Другое условие, если текущий юзер является автором текущего элемента ($arElement), проверяется просто
Код
if($arElement['CREATED_BY']==$USER->GetID()) $arResult['EDIT']=true;

Третье условие - если у юзера есть стандартное право на изменение всего иблока (CIBlock::GetPermission).
Далее, используя $arResult['EDIT'] в шаблоне компонента можно добавлять (свою собственную) форму редактирования или ссылку на страницу редактирования, а в коде компонента и/или страницы редактирования по такому же условию при наличии данных с отправленной формы делать CIBlockElement::Update.
Если лень писать свою форму, можно модифицировать типовой компонент, добавив в том месте, где проверяется право редактирования, дополнительную проверку PROPERTY_USER и CREATED_BY.
ответил 27 Март, 14 от Eddie (2,060 баллов)
00 голосов
Дмитрий, спасибо за помощь.
Я реализовал в результате следующим образом: после подключения компонента catalog.element делаю проверку:
Код
$arGroups = CUser::GetUserGroup($USER->GetID());
      if(in_array(5, $arGroups) && $_GET['ELEMENT_ID'] == 74) // Специальное разрешение на редактирование элемента 74 для группы 5
      {
// А здесь делаю подключение модифицированного компонента iblock.element.add.form
}


А в собственном iblock.element.add.form добавил поддержку параметра ELEMENT_ID, таким образом жестко указывая, какой именно элемент будет редактироваться пользователем, в некотором роде игнорируя права доступа на него.

Моя ошибка была в том, что я надеялся увидеть стандартный всплывающий элемент управления с возможностью изменить статью, если есть соответствующие права. А оказалось, что нужно подключить iblock.element.add.form или писать собственную форму редактирования.
ответил 20 Июль, 14 от Daltazar (280 баллов)

Похожие вопросы

0 голосов
5 ответов
0 голосов
3 ответов
0 голосов
2 ответов
0 голосов
5 ответов
спросил 15 Июнь, 13 от Gill (720 баллов)
0 голосов
3 ответов