Перейти к основному содержимому
Версия: 1.23.3

Создание правил контроля доступа

подсказка

Требуемая роль: security_admin.

Повышение роли до security_admin позволяет создавать или выполнять любые другие операции с правилами контроля доступа.

Правила контроля доступа позволяют вам ограничивать доступ к объектам и операциям в зависимости от ваших бизнес-процессов.

Например, вы можете ограничить пользователей в изменении статусов задач, которые не включены в процесс (редактирование доступно только ответственному). В разделе Вариант использования рассматривается следующий случай: вам нужно скрыть конкретную информацию о сотрудниках, чтобы защитить конфиденциальную информацию и информацию об их ролях в системе.

примечание

Проверка по правилам ACL выполняется с помощью комбинации трех полей:

  • Роли
  • Условия
  • Скрипт

Если поле Роли правила контроля доступа пустое, следующим шагом будет проверка условия, если какое-либо конкретное условие было указано. Если поле Условия пустое, тогда проверяется поле Скрипт, предназначенное для проверки конкретных условий и атрибутов.

Если какой-либо из этих шагов завершается неудачей, проверка правил также завершается ошибкой. То есть правила не проверяются на следующем шагу, если предыдущие не выполняются.

Схема ниже показывает процесс проверки по правилам контроля доступа:

Чтобы создать правило контроля доступа, выполните следующие шаги:

  1. Перейдите в Безопасность → Контроль доступа (ACL).
  2. Нажмите Создать и заполните поля.
  3. Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.

Поля формы Контроль доступа

ПолеОбязательноОписание
НаименованиеДаПоле доступно только для чтения и заполняется автоматически системой после сохранения записи. Слово в квадратных скобках указывает на операцию. Имя после первой точки указывает на защищенную таблицу и колонку (если он указан в поле Колонка) после другой точки:
[Delete].sys_history
[Read].sys_history.created_by
.
Это поле поддерживает подстановочный знак звездочки (*) вместо имени записи, таблицы или поля, что позволяет выбирать все объекты, соответствующие типу записи, всем таблицам или всем полям.
ОперацияДаВыберите операцию для защиты. Доступные варианты:
  • создание
  • чтение
  • запись
  • удаление
Одно правило контроля доступа может защитить только одну операцию. Чтобы защитить более одной операции, создайте для каждой их них отдельное правило контроля доступа.
Для всех таблицНетУстановите этот флажок, чтобы защитить все таблицы в системе. При выборе поле Таблица будет скрыто до тех пор, пока флажок не будет снят.
ТаблицаДаУкажите таблицу для защиты. Одно правило контроля доступа может защитить только одну таблицу. Чтобы защитить несколько таблиц, создайте для каждой из них отдельное правило контроля доступа.
ОписаниеНетВведите описание объекта или разрешений, которые защищают это правило контроля доступа.
РолиНетУкажите роли, необходимые для прохождения проверки правила контроля доступа. После указания роли пользователи без этой роли проверку не проходят. Вы можете выбрать несколько ролей.
АктивенНетУстановите флажок, чтобы активировать правило контроля доступа.
Игнорируется админомНетУстановите флажок, чтобы разрешить системным администраторам (пользователям с ролью admin) автоматически игнорировать правило контроля доступа. Пользователи с правами администратора будут иметь доступ к объекту или операции независимо от существующих ограничений.
Снимите флажок, чтобы проверять таких пользователей на соответствие правилу. Определите условия в конструкторе условий или в поле Скрипт, чтобы создать проверку на доступ, которым пользователи администраторы должны соответствовать для получения доступа.
Для всех полейНетУстановите этот флажок, чтобы защитить все поля в таблице. При выборе поле Колонка будет скрыто до тех пор, пока флажок не будет снят.
КолонкаНетУкажите колонку для защиты. Одно правило контроля доступа может защитить только одну колонку. Чтобы защитить несколько колонок, создайте для каждой из них отдельное правило контроля доступа.
УсловиеНетИспользуйте конструктор условий для создания фильтров.
СкриптНетВведите скрипт, который задает условия для выполнения. Результатом выполнения скрипта является переменная answer, которая равна true или false.
примечание

При передаче в переменную answer любого значения не типа Boolean, оно неявно приведется в Boolean.

Пример
answer = current.sys_id;
// если запись уже существует - true, если записи еще нет (null) - false

Вариант использования


Кейс 1

Компания должна скрывать следующую информацию о сотрудниках:

  • Мобильный телефон
  • Роли пользователя

Доступ к такой информации должен быть только у пользователей с ролями user_manager и admin и у самих сотрудников. Сотрудник не может просматривать телефон и роли других сотрудников.

Для этого вам нужно настроить два правила контроля доступа:

Правило контроля доступа №1 дает доступ к полю Мобильный телефон владельцу записи:

ПолеЗначение
Операциячтение
Игнорируется админомtrue
ТаблицаСотрудники
КолонкаМобильный телефон
УсловиеID равно javascript: return ss.getUserID();

Создано правило: [Read].employee.mobile_phone.

Правило контроля доступа №2 дает доступ к полю Мобильный телефон пользователям с ролью user_manager:

ПолеЗначение
Операциячтение
Игнорируется админомtrue
ТаблицаСотрудники
КолонкаМобильный телефон
Ролиuser_manager

Создано правило: [Read].employee.mobile_phone.

Результат:

На двух скриншотах ниже показан список Сотрудники с правилами контроля доступа №1 и №2.

Список записей, показываемых владельцу записи без роли user_manager (Степан Петров):

Список записей, отображаемых пользователю с ролью user_manager:

Кейс 2

Вам нужно разрешить доступ на редактирование только к одному полю в таблице Запросы (itsm_request), но создание правил контроля доступа для каждого поля затратно по времени и неэффективно.

Для этих целей вам нужно создать всего 2 правила:

  • [Write].itsm_request.discussion – дает доступ к редактированию поля Беседа.
  • [Write].itsm_request.* – ограничивает доступ ко всем полям пользователям без роли ITSM agent. Ограничение работает для каждого поля, для которого не создано иного правила контроля доступа.

Поскольку это правило ACL не определяет роли и условия, оно является разрешающим правилом ACL.

[Write].itsm_request.discussion

ПолеЗначение
Операциязапись
Игнорируется админомtrue
ТаблицаЗапросы
Для всех полейfalse
КолонкаБеседа

Это правило разрешает доступ на редактирование всех полей в таблице Запросы для пользователей с ролью ITSM_agent. Для пользователей без этой роли все поля таблицы Запросы недоступны для редактирования.

[Write].itsm_request.*

ПолеЗначение
Операциязапись
Игнорируется админомtrue
ТаблицаЗапросы
Для всех полейtrue
РолиITSM_agent

Эти правила контроля доступа гарантируют, что заявитель (или любой другой пользователь, который не является агентом) не сможет редактировать поля записи. Только пользователи с ролью ITSM_agent и admin могут это делать. В то же время заявитель может оставлять комментарии для связи с назначенным пользователем или группой.

Другими словами, правило контроля доступа, помеченное знаком звездочки (*), ограничивает работу со всеми полями, кроме тех, которые имеют отдельные правила доступа.