+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Расширенные права доступа: Формирование идентификаторов субъектов, программная установка прав доступа

Ряд аспектов о новых правах доступа уже описывался в презентации Максима Смирнова, в посте Евгения Жукова и в посте Антона Долганина, может кого-то упустил, пардон.
Дополню эту информацию типами и способами формирования идентификаторов субъектов ("group codes" в терминологии расширенных прав битрикса):
  • U1 - Us er (пользователь с 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 (все авторизованные пользователи);
Имея эту информацию можно автоматизировать установку прав в своих скриптах, пользуясь методами класса  CIBlockElementRights. В предыдущем моём посте был пример кода, как с помощью класса извлекаются текущие права элемента и устанавливаются новые права:
$ob = new CIBlockElementRights($iblockId, $elementId); // создаём объект прав и инициализируем нашим элементом
$ar = $ob->GetRights(); // получаем массив текущих прав элемента
$ob->SetRights($ar); // устанавливаем права элемента
Пример возвращаемого массива прав элемента:
Array
(
    [230] => Array // ID набора прав
        (
            [GROUP_CODE] => G37 // описанный выше группкод
            [DO_INHERIT] => Y // производить наследование
            [IS_INHERITED] => Y // признак наследованных прав
            [OVERWRITED] => 0 // признак перезаписи
            [TASK_ID] => 46 // ID уровня доступа
            [XML_ID] => // дополнительный произвольный ID, по которому потом, например, можно фильтровать установленные вами права
            [ENTITY_TYPE] => iblock // тип сущности
            [ENTITY_ID] => 74 // ID сущности
        )
)
Пример массива для установки новых прав на объект:
Array
(
    [n0] => Array // "n".$i - это важно, по "n" метод определяет, что нужно создать новый набор прав
        (
            [GROUP_CODE] => CR // группкод "Автор"
            [TASK_ID] => 29 // уровень доступа
            [XML_ID] => blablabla // наш произвольный ид
        )
)
Следует отметить, что если вы хотите не заменить, а дополнить существующие права элемента, то в метод SetRights() нужно передавать массив не только с новыми правами, но и со старыми, иначе метод удалит все права, которых нет в переданном ему массиве. Важный момент - ключи массива старых прав должны быть сохранены, так как они являются идентификаторами существующих прав, осторожней с array_merge(), для склеивания массивов с сохранением ключей юзайте $array1+$array2.
Таким образом, чтобы зачистить все права элемента, можно в SetRights() передать просто пустой массив. Другой способ зачистки ненужных существующих прав - это модификация массива существующих прав с добавлением к ненужным правам элемента "DO_CLEAN" => "Y". Хотя первый способ, просто не передавать ставшие ненужными права, проще.
Можно не только добавлять новые права и удалять старые, но и изменять существующие. Для этого нужно передать в SetRights() массив с уже существующими идентификаторами, но с новыми параметрами этих прав.

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA