Роли
В 1С существует два основных принципа:
- Запрещено всё, что явно не разрешено.
- Нет механизмов "запрета", есть только механизмы "разрешения". Если право дано одной ролью, его невозможно отнять другой.
1. Права доступа — это минимальная и единственная единица, определяющая доступ к чему-либо (объекту, реквизиту, режиму работы). Права связаны иерархически: чтобы дать право низкого уровня (например, "Редактирование"), нужно дать права более высокого уровня ("Чтение", "Изменение").
2. Роли, профили и группы доступа — это обвязка для удобной группировки и выдачи прав.
- Роль — набор связанных прав.
- Профили доступа и Группы доступа (в типовых решениях) — надстройки над ролями для массового назначения комплектов ролей пользователям.
3. Логика разрешений (пересечение ролей) — итоговые права пользователя это объединение (OR) всех прав из всех его ролей. Важно избегать ситуаций, когда одна роль даёт нежелательный доступ, который нельзя будет забрать.
4. Косвенные механизмы управления доступом
| Механизм | Назначение | Влияние на доступ | Ключевые особенности |
|---|---|---|---|
| Функциональные опции | Интерфейсное скрытие неиспользуемого функционала (кноп ок, полей). | Не влияет на реальный доступ! Пользователь может работать со скрытыми данными через обработки. | Упрощает интерфейс, но не защищает данные. |
| RLS (Record Level Security) | Фильтрация данных на уровне записей в рамках конкретной роли. | Ограничивает выдачу прав, разрешая работать только с определёнными записями (напр., по организации). | Это фильтр, а не запрет. Если право дано другой ролью без RLS — фильтр не сработает. |
| Разделение данных | Физическое разделение данных в одной ИБ для независимой работы (арендаторы, филиалы). | Жёсткая фильтрация по разделителю на уровне всех запросов. | Даёт выигрыш в скорости при работе внутри раздела, но резко замедляет работу при его отсутствии. |
| Программный код | Точечные ограничения в конкретных формах, отчетах или модулях объектов. | Частично ограничивает действия в заданных с ценариях (например, проверка при открытии формы). | Не гарантирует полную защиту, так как данные могут быть получены другими способами (запросами, обработками). |
Итог:
- База: Правильное разбиение на роли.
- Ограничение видимости данных: Использование RLS.
- Частные случаи: Программный код.
- Упрощение интерфейса: Функциональные опции.
- Изоляция независимых данных: Разделение данных.
Для анализа итоговых прав пользователя в типовых конфигурациях используйте стандартный отчёт "Права доступа".
RLS
Разграничение прав доступа на уровне записей (строк таблиц). Позволяет ограничить видимость данных для разных пользователей/групп.
Ключевые моменты
| Описание | Важно | |
|---|---|---|
| Уровень | Разграничение на уровне отдельных записей (строк) | В отличие от ролей (объектный уровень) |
| Параметры | Используются параметры сеанса &Параметр | &ТекущийСклад, &ТекущийПользователь |
| Производительный режим | Новая оптимизация в БСП 3.x | Требует специальной настройки |
Пример RLS для документа:
// Ограничение по ответственному
Ответственный = &ТекущийПользователь
Производительность:
- Избегать периодических регистров — сложные вычисления в RLS
- Использовать готовые данные — предварительно рассчитанные значения
- Индексы — поля в условиях RLS должны быть проиндексированы
Архитектура в типовых конфигурациях:
- Профили групп доступа — шаблоны настроек прав доступа, выбираются роли конфигурации
- Группы доступа — указывается профиль, пользователи, ограничения на уровне записей
- Роли конфигурации — привязываются к профилю в
Частые ошибки
- Сложные условия в RLS — вычисления, подзапросы
- Дублирование условий — в нескольких ролях для одного объекта
- Отсутствие индексов — на полях, используемых в RLS
- Использование медленных виртуальных таблиц — периодических регистров
Оптимизация RLS
Производительный режим (БСП 3.x):
- Предварительные вычисления — данные готовятся заранее
- Кэширование — результаты RLS кэшируются
- Меньше JOIN — упрощенные условия в SQL
Общие рекомендации:
- Простая логика — элементарные сравнения (
=,IN) - Использование справочников — вместо вычислений в запросе
- Тестирование на объеме — проверка с реальными данными
Множественные роли с RLS для одного пользователя:
- Разные объекты — можно
- Разные права — можно (чтение + запись)