$arTasks = CIBlockRights::GetRightsList(); // получаем массив уровней доступа $object = new CIBlockElementRights($iblockID, $elementID); // создаём объект прав, передав в него id инфоблока и id элемента $arRights = $object->GetRights(); // получим права для элемента $object->SetRights($arRights); // установим права для
<? Array( [1] => Array ( [GROUP_CODE] => G2 // группа с id 2 [DO_INHERIT] => Y // наследовать права [IS_INHERITED] => Y // права унаследованы [OVERWRITED] => 0 // признак перезаписи [TASK_ID] => 29 //id уровня доступа [XML_ID] => // дополнительный ID, не обязательный параметр. Можно использовать для фильтрации [ENTITY_TYPE] => iblock // тип сущности инфоблок [ENTITY_ID] => 4 //id сущности ) [2] => Array ( [GROUP_CODE] => U1 // пользователь с id 1 [DO_INHERIT] => Y [IS_INHERITED] => N [OVERWRITED] => 0 [TASK_ID] => 28 [XML_ID] => [ENTITY_TYPE] => element // тип сущности элемент [ENTITY_ID] => 43 //id сущности ) ) ?>
Коды групп [GROUP_CODE]: U1 - User (пользователь с ID = 1); G1 - Group (группа пользователей с ID = 1); D1 - Department (сотрудники отдела с ID = 1); DR2 - Department Recursive (сотрудники отдела с ID = 2 и его подотделов); SG3_A - Sonet Group (админ (владелец) группы соцсети с ID = 3); SG3_E - Sonet Group (модераторы группы соцсети с ID = 3); SG3_K - Sonet Group (все члены группы соцсети с ID = 3); CR - Creator (создатель (автор) элемента); AU - Authorized Users (все авторизованные пользователи);
Если вы желаете только дополнить набор прав, то необходимо передать не только новые значения, но и старые, т.е. в полученный массив $arRights добавить еще 1 элемент с ключем n0. Примерно такого содержания:
<? Array ( [n0] => Array ( // "n".$i - это важно, по "n" метод определяет, что нужно создать новый набор прав [GROUP_CODE] => U22 // пользователь с id 22 [TASK_ID] => 34 // уровень доступа ) ) ?>
Если новых прав будет больше чем 1, то остальные ключи будут n1, n2 ,n3 и т.д.
Ну и для примера рабочий вариант:
<? $blockID = 4; $elementID = 43; $UserID = 13; $GroupID = 3; $object = new CIBlockElementRights($blockID, $elementID); // создаём объект прав для нужного элемента $arRights = $object->GetRights(); // получаем текущие права $arRights["n0"] = array( "GROUP_CODE" =>"U".$UserID, "TASK_ID" => 35 ); $arRights["n1"] = array( "GROUP_CODE" =>"G".$GroupID, "TASK_ID" => 34 ); $object->SetRights($arRights); // устанавливаем права элемента ?>
Как, программно узнать, может ли пользователь читать секцию, или писать в нее, или писать в конкретный элемент, или удалять конкретный элемент?
Все просто, за это отвечают два метода:
CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $SECTION_ID, $permission); CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $ELEMENT_ID, $permission);
Они возвращают для текущего авторизованного пользователя булево значение — true/false. На входе принимает три параметра: ID инфоблока, ID секции/элемента (если ноль, то подразумевается проверка прав на добавление), и, собственно, уровень доступа, который мы проверяем на «имеет ли».