Практическое задание 5. Настройка дискретного доступа

Практическое задание 5. Настройка дискретного доступа#

В задании показано, как настроить дискретный доступ к объектам так, чтобы пользователю были доступны только расходные договоры подразделений СМТ-1 и УМТОП.

Настройка дискретного доступа#

Настройте роль так, чтобы пользователю были доступны только расходные договоры подразделений СМТ-1 и УМТОП.

Для этого выполните следующие действия:

  1. В справочнике администрируемых объектов откройте раздел «Администратор > Настройки > Администрируемые объекты».

  2. Найдите объект Cnt_Contract и откройте его карточку.

  3. В карточке администрируемого объекта установите признак «Дискретный доступ».

  4. На закладке «Дискретные ограничения доступа» создайте административные правила с типом «Примитивное правило».

  1. Для каждого правила укажите скрипты на следующих закладках:

    • «Скрипт для фильтрации объектных привилегий» — определяет, какие объекты будут доступны в списках;

    • «Скрипт проверки строк по объектному кешу» — проверяет доступ к объекту при открытии по ссылке из других документов.

В этом задании используются два правила:

  • по ОФС участников договора;

  • по типу договора.

Правило по ОФС участников договора#

Скрипт для фильтрации объектных привилегий:

select 1
     from cnt_Contract tt
     join Cnt_ContractOFSParticipants cp 
       on tt.id = cp.idcontract 
     join Bs_OFStructure ofs 
       on cp.idofstructure = ofs.id
    where tt.id = (&id)
      and exists (
      select 1 from (select cast(json_array_elements_text(cast((&params) as json)) as int8) as id) ids where ids.id = ofs.id
      )

Скрипт проверки строк по объектному кешу:

for (p: params) {
  var idv = row.id;
  var ropObj = Cnt_ContractApi.load(idv);
  var colRops = Cnt_ContractOFSParticipantsApi.byParent(ropObj);
  var colJRops = toJRops(colRops).asList();
  for (colRop: colJRops) {
      if (colRop.idOFStructure != null) {
        if (colRop.idOFStructure.toString() == p.toString()) {
          return true;
        }
    }
  }
}

Правило по типу договора#

Скрипт для фильтрации объектных привилегий:

select 1
     from cnt_Contract tt
     join (
     select cast(json_array_elements_text(cast((&params) as json)) as int8) as id
      ) as ids 
     on tt.idobjecttype = ids.id
    where tt.id = (&id)

Скрипт проверки строк по объектному кешу:

for (p: params) {
  var idv = row.id;
  var ropObj = Cnt_ContractApi.load(idv);
  var idObjectType = Cnt_ContractApi.getAttrValue(ropObj,"idObjectType");
  if (idObjectType.toString() == p.toString()) {
    return true;
  }
}
  1. На закладке «Параметр правила» для каждого правила укажите:

    • в поле «Тип параметра» — значение «Ссылочный на объект»;

    • в поле выбора класса — класс, из которого будут выбираться значения параметров.

В этом задании используются следующие классы:

  • Bs_OFStructure — для ОФС;

  • Btk_ObjectType — для типа объекта.

  1. В карточке роли откройте закладку «Дискретный доступ» и добавьте администрируемый объект, для которого требуется настроить доступ.

  2. В детализации на закладке «Значения правила» укажите значения, по которым должны проверяться правила.

  1. На закладке «Права роли» найдите и выделите нужный администрируемый бизнес-объект.

  2. В детализации «Расшифровка прав» выберите настроенное ограничение для прав на просмотр или редактирование объектов.