Фильтрация данных по правам
INFRAX автоматически фильтрует отображаемые данные на основе прав доступа пользователя. Система обеспечивает, что пользователи видят только те ресурсы, к которым у них есть доступ, без необходимости ручной проверки прав на каждом уровне.
Обзор системы фильтрации
Система фильтрации данных в INFRAX работает на нескольких уровнях, обеспечивая безопасность и правильное отображение информации каждому пользователю.
Принципы работы
- Автоматическая фильтрация — данные фильтруются автоматически при каждом запросе
- Серверная обработка — фильтрация происходит на сервере до отправки данных клиенту
- Прозрачность для пользователя — пользователь не видит недоступные ресурсы
- Производительность — оптимизированные SQL-запросы с учетом прав
- Консистентность — единые правила фильтрации во всей системе
Области применения фильтрации
| Область | Что фильтруется | Основа фильтрации |
|---|---|---|
| Узлы сети | Дерево узлов, списки серверов | Права на объекты (/objects/.../) |
| Тикеты | Список тикетов Helpdesk | Права на организации (/orgs/.../) |
| Меню | Пункты навигационного меню | Права на меню (/menu/.../) |
| Мониторинг | Дашборды, метрики | Права на узлы + права на меню |
| Сессии | История удаленных подключений | Права на узлы |
Фильтрация данных является неотъемлемой частью системы безопасности INFRAX. Даже если пользователь попытается обойти интерфейс и напрямую обратиться к API, серверная фильтрация предотвратит доступ к недоступным данным.
Фильтрация узлов сети
Узлы сети фильтруются автоматически при построении дерева объектов и во всех представлениях системы.
Принцип фильтрации узлов
Алгоритм фильтрации
- Проверка прав администратора — если пользователь администратор (
/:/:allow), показываются все узлы - Проверка прав на каждый узел — для каждого узла проверяется наличие любого права (edit или remoteConnect)
- Включение родительских папок — если узел доступен, включаются все родительские папки для построения дерева
- Построение дерева — из отфильтрованных узлов строится иерархическое дерево
Где применяется фильтрация узлов
| Компонент | Описание |
|---|---|
| Дерево узлов | Основное иерархическое представление узлов в левой панели |
| Просмотр по сетям | Группировка узлов по сетевым сегментам |
| Просмотр по агентам | Группировка узлов по наличию агентов |
| Просмотр по приложениям | Группировка узлов по установленным приложениям |
| Выбор узла в формах | Выпадающие списки для выбора узлов (например, при создании тикета) |
| Дашборды мониторинга | Отображение метрик только для доступных узлов |
| История сессий | Показ подключений только к доступным узлам |
Пример фильтрации
Исходная структура
/objects
├── /datacenter1
│ ├── /production
│ │ ├── server1
│ │ └── server2
│ └── /development
│ └── server3
└── /datacenter2
└── server4
Права пользователя
/objects/datacenter1/production/server1:/objects/edit:allow
/objects/datacenter2/server4:/objects/remoteConnect:allow
Отфильтрованное дерево
/objects
├── /datacenter1
│ └── /production
│ └── server1
└── /datacenter2
└── server4
Примечание: Папки /datacenter1, /production и /datacenter2 включены автоматически для построения правильной иерархии, даже если на них нет явных прав.
Родительские папки отображаются в дереве, даже если у пользователя нет прав на саму папку. Это необходимо для правильного отображения иерархии. Однако операции с этими папками (редактирование, удаление, добавление дочерних узлов) будут недоступны.
Фильтрация тикетов
Тикеты фильтруются на основе прав доступа к организациям, обеспечивая изоляцию данных между клиентами.
Принцип фильтрации тикетов
Правила фильтрации
- Доступ к организации — пользователь видит тикеты только тех организаций, к которым у него есть доступ
- Собственные тикеты — пользователь всегда видит тикеты, где он является автором или исполнителем
- Права Helpdesk — пользователи с правом
/menu/support/tickets:/menu/allowмогут видеть тикеты разрешенных организаций - Права "Мои тикеты" — пользователи с правом
/menu/my/tickets:/menu/allowвидят только свои тикеты
Сценарии фильтрации
| Роль | Права | Видимые тикеты |
|---|---|---|
| Администратор | /:/:allow |
Все тикеты всех организаций |
| Администратор Helpdesk |
/menu/support/tickets:/menu/allow/orgs/*:/organizations/access-to-organization:allow
|
Все тикеты всех организаций |
| Сотрудник поддержки |
/menu/support/tickets:/menu/allow/orgs/1:/organizations/access-to-organization:allow/orgs/5:/organizations/access-to-organization:allow
|
Тикеты организаций ID=1 и ID=5 |
| Пользователь |
/menu/my/tickets:/menu/allow/orgs/1:/organizations/allow-create-tickets-by-org:allow
|
Только свои тикеты организации ID=1 |
Фильтрация при назначении исполнителей
При назначении исполнителя тикета система автоматически фильтрует список доступных сотрудников:
Критерии отбора исполнителей
- Пользователь должен иметь право
/menu/support/tickets:/menu/allow - Пользователь должен иметь доступ к организации тикета
- Учитываются как конкретные права, так и wildcard (
/orgs/*)
Фильтрация тикетов по организациям обеспечивает автоматическую изоляцию данных клиентов. Даже при ошибке в настройке интерфейса, серверная фильтрация не позволит пользователю увидеть тикеты недоступных организаций.
Технические детали
Методы фильтрации
Система использует централизованные методы для фильтрации данных:
| Метод | Назначение |
|---|---|
filterNodesByAcl() |
Фильтрация массива узлов по правам доступа |
getFilteredNodesInfo() |
Получение полной информации об узлах с фильтрацией |
prepareNodesForWebSocket() |
Подготовка данных узлов для WebSocket с фильтрацией |
getCurrentUserOrganizations() |
Получение списка доступных организаций для текущего пользователя |
canViewNode() |
Проверка возможности просмотра конкретного узла |
Оптимизация производительности
Подходы к оптимизации
1. Кэширование прав
Права пользователя хранятся в сессии и не запрашиваются при каждой проверке.
2. Фильтрация на уровне запросов
Для больших наборов данных фильтрация применяется непосредственно в SQL-запросах.
3. Проверка администратора
Для администраторов (/:/:allow) фильтрация пропускается, возвращая все данные без дополнительных проверок.
4. Обработка wildcards
Права с wildcard (*) обрабатываются оптимизированными алгоритмами для минимизации количества проверок.
WebSocket и реального времени
Фильтрация данных применяется также для обновлений в реальном времени через WebSocket:
Особенности WebSocket фильтрации
- При подключении клиента данные фильтруются на основе его прав
- Обновления отправляются только для доступных узлов
- При изменении прав пользователя требуется переподключение
- Фильтрация происходит на сервере до отправки данных
Рекомендации
Лучшие практики работы с фильтрацией данных
1. Полагайтесь на автоматическую фильтрацию
- Не пытайтесь реализовать дополнительную фильтрацию на клиенте
- Доверяйте серверной фильтрации данных
- При возникновении вопросов о доступности данных проверяйте права пользователя
2. Тестирование прав
- После назначения прав проверьте фильтрацию под учетной записью пользователя
- Убедитесь, что недоступные узлы действительно не отображаются
- Проверьте работу фильтрации в различных представлениях (дерево, сети, агенты)
3. Организация структуры узлов
- Группируйте узлы логически для упрощения назначения прав
- Используйте папки для создания уровней доступа
- Помните, что родительские папки будут видны пользователям
4. Права на организации
- Четко разграничивайте доступ к организациям для изоляции данных клиентов
- Используйте wildcard (
/orgs/*) только для администраторов Helpdesk - Регулярно проверяйте назначенные права на организации
5. Мониторинг доступа
- Следите за тем, какие данные видят пользователи
- При обнаружении проблем с доступом проверяйте логику фильтрации
- Используйте методы проверки прав для диагностики
Если вы разрабатываете дополнительные модули или интеграции с INFRAX, всегда используйте стандартные методы фильтрации данных. Не обходите встроенные механизмы безопасности и не реализуйте собственную логику фильтрации без крайней необходимости.