Задать вопрос
nilsrus
@nilsrus
Кодер-самоучка

API Bitrix: расширенное управление правами на элементы и разделы инфоблоков через API существует?

В связи с большим количеством пользователей и разделов инфоблоков, на которые среди них нужно разделять права, возникла необходимость создать отдельный интерфейс в виде матрицы, позволяющей в один клик переключать режим доступа к соответствующему разделу. Поиски в интернетах привели только к классам CIBlockRights, CIBlockSectionRights и CIBlockElementRights, описание которых не нашел нигде. Разобраться в этих отнюдь не независимых классах мне кажется довольно затратным занятием. Прошу помочь разобраться в том, как добавить/убрать права конкретного пользователя на конкретный раздел с помощью API?
  • Вопрос задан
  • 5940 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
nilsrus
@nilsrus Автор вопроса
Кодер-самоучка
Нашел решение. Спасибо, vtyrtov.
Накидал функцию изменяющую права пользователя на раздел:
function chmodSectionAccess($bid, $sid, $uid, $tid, $mod){
	$bid = intval($bid); // идентификатор инфоблока
	$sid = intval($sid);  // идентификатор раздела
	$uid = intval($uid); // идентификатор пользователя
	$tid = intval($tid); // идентификатор уровня доступа
	$mod = ($mod === "Y"); // дать/убрать (Y|N) права на раздел 
	
	if ($bid > 0 && $sid > 0 && $uid > 0 && $tid > 0) {
		
// получаем текущий массив прав
		$ob = new CIBlockSectionRights($bid, $sid);
		$ar = $ob->GetRights(); 
		
		if ($mod) { 
// дополняем в массив новый элемент
			$ar["n0"] = array(
				"GROUP_CODE" =>"U" . $uid,
				"TASK_ID" => $tid,
				"XML_ID" => "API"
			);
		} else {
			// находим совпадающее со входными данными и исключаем из массива
			foreach($ar as $i => $r) {
				if ($r["GROUP_CODE"] === "U" . $uid && 
					$r["TASK_ID"] === $tid) unset($ar[$i]);
			}
		}
// записываем новые права из массива (другие не наследуемые будут удалены)
		$ob->SetRights($ar); 
		
		return true;
	} else {
		return false;
	}
}


Надеюсь кому-то поможет данное решение.
Буду рад, если подскажете способ еще проще.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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