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

В документе описан порядок настройки дискретного доступа: как включить механизм в администрируемом объекте, создать правила и параметры, выдать права через роли.
Материал отвечает на вопросы: как ограничить доступ по объектам или записям, как настроить наследование параметров через профили, как создать подправила для гибкой проверки.

Дискретный доступ используется в случаях, когда стандартной настройки прав на объект недостаточно. Обычные настройки доступа применяются ко всем объектам системы и их атрибутам целиком: например, пользователю либо доступны все договоры, либо не доступны никакие. Дискретный доступ позволяет ограничивать права пользователя в зависимости от значений атрибутов конкретного объекта или записи, например по подразделению, типу договора или состоянию.

Ограничения дискретного доступа применяются до отображения списков, поэтому пользователь видит только те объекты, на которые у него есть право. Для открытия объектов по ссылкам из других документов используется отдельная проверка через скрипт объектного кеша.

Включение в администрируемом объекте#

  1. Откройте карточку администрируемого объекта.

  2. Установите признак «Дискретный доступ».

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

  4. Создайте дискретное ограничение.

Дискретное ограничение доступа

  1. Создайте новую запись или откройте существующую для редактирования.

  2. Укажите уникальное в рамках администрируемого объекта имя и наименование.

  3. Настройте тип правила.

  4. Настройте параметры правила.

Для каждого дискретного ограничения обычно настраиваются два скрипта:

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

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

Типы правил#

Доступны три варианта типа правила:

  • примитивное;

  • составное;

  • без параметров.

Примитивное правило

Состоит из одного параметра.

При анализе прав пользователя значения параметра со всех его ролей собираются в массив примитивных значений. Например, для числового правила массив будет иметь вид: [10, 20, 30].

Составное правило

Состоит из нескольких параметров.

Алгоритм анализа прав пользователя:

  1. Для каждого набора значений на роли формируется JSON-объект.

  2. Каждая роль может иметь несколько наборов значений. Результат агрегации — массив таких объектов.

  3. При агрегации прав пользователя:

    • анализируются массивы со всех ролей;

    • в JSON ИД параметров заменяются на имена;

    • каждый элемент приводится к строке;

    • собирается результирующий массив уникальных строк.

Правило без параметров

Не содержит параметров.

При анализе прав правило проверяется, если оно назначено хотя бы на одной роли пользователя.

Параметры правила#

Параметры определяют тип данных и ссылочность значений. Доступные типы определения:

  • «Обычный» — значения указываются на ролях;

  • «Динамический» — значения определяются скриптом в настройке дискретного доступа на администрируемом объекте;

  • «Определяется профилем» — значения берутся из параметров подчинённых профилей пользователя.

Важно

Если для роли назначен параметр с типом «Определяется профилем», роль должна иметь тип «Мастер-роль».

Для примитивного правила доступен один параметр с системным именем SimpleAcObjectRuleParam. Для составного правила — несколько параметров.

Настройка в роли#

  1. Откройте карточку роли или выберите её в списке.

  2. Перейдите на закладку «Дискретный доступ».

  3. Создайте новую запись, выбрав администрируемый объект.

  4. Укажите значения параметров для ограничений.

  5. Сопоставьте объектные и элементарные привилегии с нужными значениями, заполнив поле «Ограничение дискретного доступа».

Ограничение доступа к объектам класса

Выдается через объектные привилегии с системными именами edit# и view#.

Совет

Если у администрируемого объекта нет привилегий edit# или view#, выполните его синхронизацию.

Дискретные ограничения применяются только если:

  • это главная выборка администрируемого объекта (шапка БО);

  • пользователь не является супер-пользователем;

  • к администрируемому объекту применяются настройки администрирования;

  • администрируемый объект имеет признак «Дискретный доступ».

Деривация профилей#

Для дифференциации доступа по организационным уровням (склады, бизнес-единицы, организации) реализован подход:

  1. Роли делятся на обычные и мастер-роли. Для мастер-ролей при назначении полномочий можно указать, что значения параметров дискретного доступа определяются профилем.

  2. Профили делятся на мастер-профили, подчинённые и обычные. Мастер-роли включаются только в мастер-профили.

  3. Для подчинённого профиля указываются конкретные значения параметров дискретного доступа.

  4. При проверке прав система определяет параметры от подчинённого профиля пользователя.

Схема деривации прав

Совет

Пользователям можно назначать только обычные и подчинённые профили. Мастер-профили используются только как шаблоны.

Подправила#

Особенности подправил

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

Создание подправила

  1. Откройте карточку администрируемого объекта.

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

  3. Выберите или создайте правило.

  4. Под выбранным правилом добавьте подправило.

  5. Назовите подправило именем, используемым в коде для проверки доступа.

  6. Настройте скрипты для подправила.

Проверка прав после редактирования#

Чтобы система откатывала изменения, если после редактирования объект становится недоступен даже для чтения:

  1. Откройте карточку администрируемого объекта.

  2. Установите признак «Дискретный доступ».

  3. Установите признак «Проверять изменение прав объектов на сохранении».

При включённой проверке, если после редактирования объект становится недоступен даже для чтения, система откатит изменения и выдаст ошибку.