1с как ограничение прав доступа на уровне записей

Узнай, как в 1С ограничить права доступа на уровне записей за 3 клика и спи спокойно!

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Общие сведения

Ограничение прав доступа на уровне записей в системе 1С:Предприятие 8 позволяет точно контролировать, какие объекты (документы, справочники, регистры) и в каком объёме может видеть или изменять конкретный пользователь или роль.
Это достигается без «расколотых» баз данных и без множества копий одной и той же конфигурации — всё решаеться встроенными средствами механизма контроля доступа RLS (Record Level Security).

Зачем нужен RLS

  • Разные филиалы не должны видеть данные друг друга.
  • Менеджер видит только «свои» договоры.
  • Кладовщик не имеет доступа к ценам, но видит остатки.
  • Внешний бухгалтер видит только часть проводок, относящихся к его договору.

Ключевые понятия

Роли и пользователи

В конфигураторе создаются роли, в которые входят пользователи.
Роль содержит набор прав доступа к объектам (чтение, запись, добавление, удаление) и ограничения по строкам.

Представление записи (RLS-фильтр)

В свойствах роли в колонке «Ограничение по строкам» задаётся выражение, возвращающее список ссылок, которые пользователь сможет прочитать или изменить.
Примеры:

Договор.Организация = &ТекущаяОрганизация
Склад.Владелец = &ТекущийПользователь
РегистрОстатков.Номенклатура.Вид = Перечисление.ВидыНоменклатуры.Товары

Пошаговая настройка

Шаг 1. Подготовка справочников

В справочниках, по которым будет строиться фильтрация (например, Организации, Филиалы, Пользователи), добавьте реквизит, который будет служить «ключом доступа».
Чаще всего это реквизит-ссылка на ФизическиеЛица или Организации.

Шаг 2. Создание роли

  1. Откройте конфигуратор → раздел Администрирование → Роли.
  2. Добавьте новую роль, например «МенеджерФилиала».
  3. На вкладке «Доступ к объектам» установите базовые права: чтение, запись, добавление документов.
  4. В колонке «Ограничение по строкам» для объекта Документ.РеализацияТоваров впишите:

    Документ.Организация = Значение("Справочник.Организации", &ТекущийФилиал)
  5. Сохраните роль и обновите базу.

Шаг 3. Привязка пользователя к роли

В Конфигурации → Администрирование → Пользователи откройте карточку пользователя, перейдите на вкладку «Роли» и добавьте созданную роль.
Не забудьте задать значение параметра &ТекущийФилиал в «Дополнительных параметрах пользователя» (таблица ПараметрыСеанса).

Виды ограничений

Тип объекта Ограничение Пример RLS-выражения
Справочник.Контрагенты По организации Контрагент.Организация = &МояОрганизация
Документ.ЗаказПокупателя По менеджеру Заказ.Менеджер = &ТекущийПользователь
Регистр.Остатки По складу Остатки.Склад = &РазрешенныйСклад

Продвинутые приёмы

Использование функций-ограничителей

Для сложной логики (например, иерархия организаций, динамические списки складов) создайте в модуле «ОбщегоНазначения» функцию:

Функция МоиОрганизации
 Возврат РегистрСведений.ПользовательОрганизации.НайтиПоОтбору(
 Новый Структура("Пользователь", &ТекущийПользователь)
 ).Организации;
КонецФункции

В RLS-фильтре используйте:
Договор.Организация В МоиОрганизации

Кэширование ограничений

Чтобы не пересчитывать списки при каждом обращении, поместите результат функции в КэшФункций с ключом Пользователь.
Это уменьшит нагрузку на СУБД при большом количестве пользователей.

Типичные ошибки и их решения

  • Ошибка: «Нет доступа к объекту» при открытии списка.
    Причина: в RLS-фильтре использована ссылка, к которой пользователь не имеет доступа.
    Решение: предварительно дайте права на чтение объектов-справочников, используемых в фильтре.
  • Ошибка: медленное открытие форм.
    Причина: в выражении применены неиндексированные реквизиты.
    Решение: добавьте индексы по полям фильтрации или упростите выражение.
  • Ошибка: фильтр не срабатывает в отчётах.
    Причина: в макете отчёта используется прямой запрос без учёта RLS.
    Решение: замените прямой SQL на «Виртуальные таблицы» 1С или добавьте те же условия WHERE вручную.

Контрольный чек-лист перед внедрением

  1. Определены все объекты, подлежащие ограничению.
  2. Прописаны RLS-фильтры без ошибок компиляции.
  3. Созданы тестовые пользователи для каждой роли.
  4. Проведены нагрузочные тесты (например, список из 1 000 000 записей).
  5. Добавлены индексы по полям фильтрации.
  6. Написаны автоматические тесты (можно через внешние обработки).

Правильно настроенный механизм RLS в 1С превращает одну базу данных в многоклиентскую систему без риска утечки чувствительных данных.
Главное — тщательно спроектировать ключи доступа, проверить производительность и продумать сценарии масштабирования заранее.