Управление правами

📚 Назначение прав в IDENTYX

Данный раздел описывает, как права работают и проверяются в INFRAX. Для назначения прав пользователям используется система IDENTYX.

Информация о назначении прав, создании ролей и управлении ACL находится в документации IDENTYX:

📖 Документация IDENTYX:

ℹ️ О системе управления правами

INFRAX использует гибкую систему управления правами доступа, которая интегрируется с системой управления идентификацией IAM. Права назначаются пользователям через IAM и хранятся в профиле пользователя, обеспечивая централизованное управление доступом ко всем ресурсам системы.

Обзор управления правами

Система управления правами в INFRAX обеспечивает гранулярный контроль доступа к ресурсам системы на основе иерархической модели прав, описанной в разделе Модель прав доступа.

Основные возможности

  • Индивидуальное назначение прав — права назначаются конкретным пользователям через IAM систему
  • Роли — использование предустановленных ролей для упрощения управления
  • Централизованная проверка — единая точка проверки прав через AccessControlController
  • Автоматическая фильтрация — данные автоматически фильтруются на основе прав пользователя
  • Поиск по правам — возможность найти пользователей с конкретными правами
⚠️ Важно

Права хранятся в профиле пользователя в формате JSONB массива и синхронизируются с IAM системой. Изменение прав возможно только через административный интерфейс IAM.

Назначение прав

Права доступа назначаются пользователям через интеграцию с системой управления идентификацией (IAM).

Методы назначения прав

1. Индивидуальные права

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

Формат хранения прав

Права хранятся в поле permissions профиля пользователя в виде массива строк в формате:

path:action:permission_type

Где:

  • path — путь к ресурсу (например, /objects/server1, /menu/settings)
  • action — тип действия (например, /objects/edit, /menu/allow)
  • permission_type — тип разрешения (allow или deny)

Примеры прав

Право Описание
/objects/datacenter1/server1:/objects/edit:allow Разрешить редактирование узла server1
/objects/*:/objects/remoteConnect/ssh:allow Разрешить SSH подключение ко всем узлам
/menu/support/tickets:/menu/allow:allow Разрешить доступ к разделу Helpdesk
/orgs/42:/organizations/access-to-organization:allow Разрешить доступ к организации ID=42
/objects/confidential/*:/objects/edit:deny Запретить редактирование узлов в папке confidential

2. Права через роли

INFRAX предоставляет набор предустановленных ролей для упрощения управления правами. Подробнее см. раздел Предустановленные роли.

Предустановленные роли

  • Администратор — полный доступ ко всем функциям системы (/:/)
  • Администратор Helpdesk — доступ к управлению тикетами и хелпдеску
  • Пользователь — базовый доступ к своим тикетам и ограниченный доступ к узлам
💡 Синхронизация с IAM

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

Проверка прав

INFRAX использует централизованную систему проверки прав через AccessControlController.

Методы проверки прав

Метод Назначение
hasPermission() Базовая проверка наличия права с поддержкой wildcards
canViewNode() Проверка возможности просмотра узла
canEditNode() Проверка возможности редактирования узла
canRemoteConnectToNodeWithService($nodePath, $serviceType) Проверка возможности удаленного подключения к узлу с конкретным типом сервиса. Параметр $serviceType указывает тип сервиса: rdp, ssh, vnc, winbox, web, proxmox, vmware.
canAccessSupportTickets() Проверка доступа к системе тикетов
canAccessOrganization() Проверка доступа к организации
isCurrentUserAdmin() Проверка является ли пользователь администратором

Логика проверки прав

  1. Администраторы — пользователи с правом /:/ имеют полный доступ ко всем ресурсам
  2. Проверка deny — если найдено явное запрещение (deny), доступ блокируется независимо от других прав
  3. Проверка allow — если найдено разрешение (allow) без deny, доступ предоставляется
  4. Wildcards — система автоматически обрабатывает wildcards (*) для проверки иерархических прав
  5. По умолчанию запрет — если не найдено ни allow, ни deny, доступ запрещается
✅ Автоматическая фильтрация

Система автоматически фильтрует данные на основе прав пользователя. Например, в дереве узлов показываются только те узлы, к которым у пользователя есть доступ. Подробнее см. раздел Фильтрация данных по правам.

Поиск пользователей с правами

Система предоставляет возможность поиска пользователей, обладающих конкретными правами. Это используется, например, для назначения исполнителей тикетов или уведомлений.

Методы поиска

1. Поиск по конкретному праву

Метод getUsersWithPermission() находит всех пользователей с указанным правом.

Возможности поиска

  • Поиск по точному праву
  • Поиск по массиву прав (пользователь должен иметь хотя бы одно из них)
  • Автоматическая обработка wildcards
  • Учет allow/deny логики
  • Ограничение количества результатов

2. Поиск по организации и правам

Метод getUsersWithOrgAndPermissions() находит пользователей с доступом к определенной организации и дополнительными правами.

Параметры поиска

  • organizationId — ID организации для проверки доступа
  • additionalPermissions — массив дополнительных прав (например, доступ к хелпдеску)
  • orgAction — тип действия для организации (по умолчанию access-to-organization)
  • limit — максимальное количество результатов

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

Сценарий Описание
Назначение исполнителя тикета Поиск сотрудников техподдержки с доступом к организации клиента
Уведомления о проблемах Поиск администраторов для отправки критических уведомлений
Делегирование доступа Поиск пользователей с правами на конкретные узлы
ℹ️ Производительность

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

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

Пример 1: Предоставление доступа к группе серверов

Чтобы дать пользователю доступ ко всем серверам в папке /objects/production:

Необходимые права

/objects/production/*:/objects/edit:allow
/objects/production/*:/objects/remoteConnect/rdp:allow
/objects/production/*:/objects/remoteConnect/ssh:allow

Эти права позволят:

  • Редактировать настройки всех узлов в папке production
  • Подключаться к ним удаленно через RDP и SSH

Пример 2: Ограничение доступа к конфиденциальным серверам

Для запрета доступа к конфиденциальным серверам при наличии общего доступа:

Комбинация прав

/objects/*:/objects/edit:allow
/objects/confidential/*:/objects/edit:deny
/objects/confidential/*:/objects/remoteConnect/rdp:deny
/objects/confidential/*:/objects/remoteConnect/ssh:deny

Результат:

  • Пользователь может редактировать все узлы
  • Но доступ к папке confidential и её содержимому будет заблокирован
⚠️ Приоритет deny

Права с типом deny всегда имеют приоритет над allow. Это обеспечивает безопасность и позволяет явно запрещать доступ к критически важным ресурсам.

Пример 3: Роль администратора Helpdesk

Администратору Helpdesk нужны следующие права:

Набор прав

/menu/support/tickets:/menu/allow:allow
/orgs/*:/organizations/access-to-organization:allow

Эти права предоставят:

  • Доступ к разделу Helpdesk в меню
  • Просмотр и управление тикетами всех организаций
  • Назначение исполнителей и изменение статусов

Рекомендации

Лучшие практики управления правами

1. Используйте иерархическую структуру

  • Организуйте узлы в логические папки (по датацентрам, отделам, функциям)
  • Назначайте права на уровне папок, а не отдельных узлов
  • Используйте wildcards для упрощения управления

2. Применяйте принцип минимальных привилегий

  • Давайте только те права, которые действительно необходимы
  • Регулярно пересматривайте назначенные права
  • Используйте deny для явного запрета доступа к критическим ресурсам

3. Используйте предустановленные роли

  • Начинайте с предустановленных ролей (Администратор, Администратор Helpdesk, Пользователь)
  • Дополняйте роли индивидуальными правами при необходимости
  • Документируйте нестандартные комбинации прав

4. Разделяйте права по функциям

  • Отделяйте права на просмотр от прав на редактирование
  • Разграничивайте доступ к различным разделам системы
  • Используйте права на организации для изоляции данных клиентов

5. Тестируйте права перед применением

  • Проверяйте комбинации allow/deny на тестовом пользователе
  • Убедитесь, что deny права работают как ожидается
  • Проверьте фильтрацию данных после изменения прав
✅ Аудит прав

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