Создание правил контроля доступа
Требуемая роль: security_admin.
Повышение роли до security_admin позволяет создавать или выполнять любые другие операции с правилами контроля доступа.
Правила контроля доступа позволяют вам ограничивать доступ к объектам и операциям в зависимости от ваших бизнес-процессов.
Например, вы можете ограничить пользователей в изменении статусов задач, которые не включены в процесс (редактирование доступно только ответственному). В разделе Вариант использования рассматривается следующий случай: вам нужно скрыть конкретную информацию о сотрудниках, чтобы защитить конфиденциальную информацию и информацию об их ролях в системе.
Проверка по правилам ACL выполняется с помощью комбинации трех полей:
- Роли
- Условия
- Скрипт
Если поле Роли правила контроля доступа пустое, следующим шагом будет проверка условия, если какое-либо конкретное условие было указано. Если поле Условия пустое, тогда проверяется поле Скрипт, предназначенное для проверки конкретных условий и атрибутов.
Если какой-либо из этих шагов завершается неудачей, проверка правил также завершается ошибкой. То есть правила не проверяются на следующем шагу, если предыдущие не выполняются.
Схема ниже показывает процесс проверки по правилам контроля доступа:
Чтобы создать правило контроля доступа, выполните следующие шаги:
- Перейдите в Безопасность → Контроль доступа (ACL).
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.
Поля формы Контроль доступа
Поле | Обязательно | Описание |
---|---|---|
Наименование | Да | Поле доступно только для чтения и заполняется автоматически системой после сохранения записи. Слово в квадратных скобках указывает на операцию. Имя после первой точки указывает на защищенную таблицу и колонку (если он указан в поле Колонка) после другой точки: [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 могут это делать. В то же время заявитель может оставлять комментарии для связи с назначенным пользователем или группой.
Другими словами, правило контроля доступа, помеченное знаком звездочки (*), ограничивает работу со всеми полями, кроме тех, которые имеют отдельные правила доступа.