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

    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;
    	}
    }


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