Управление правами
Данный раздел описывает, как права работают и проверяются в 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.
Проверка прав
INFRAX использует централизованную систему проверки прав через AccessControlController.
Методы проверки прав
| Метод | Назначение |
|---|---|
hasPermission() |
Базовая проверка наличия права с поддержкой wildcards |
canViewNode() |
Проверка возможности просмотра узла |
canEditNode() |
Проверка возможности редактирования узла |
canRemoteConnectToNodeWithService($nodePath, $serviceType) |
Проверка возможности удаленного подключения к узлу с конкретным типом сервиса. Параметр $serviceType указывает тип сервиса: rdp, ssh, vnc, winbox, web, proxmox, vmware. |
canAccessSupportTickets() |
Проверка доступа к системе тикетов |
canAccessOrganization() |
Проверка доступа к организации |
isCurrentUserAdmin() |
Проверка является ли пользователь администратором |
Логика проверки прав
- Администраторы — пользователи с правом
/:/имеют полный доступ ко всем ресурсам - Проверка deny — если найдено явное запрещение (
deny), доступ блокируется независимо от других прав - Проверка allow — если найдено разрешение (
allow) без deny, доступ предоставляется - Wildcards — система автоматически обрабатывает wildcards (
*) для проверки иерархических прав - По умолчанию запрет — если не найдено ни 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 всегда имеют приоритет над 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 права работают как ожидается
- Проверьте фильтрацию данных после изменения прав
Регулярно проводите аудит назначенных прав. Удаляйте неиспользуемые права и корректируйте избыточные разрешения. Это повышает безопасность системы и упрощает управление доступом.