Как сделать документ видимым в списке только пользователю с определенными правами в 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

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

Посмотрим, какие инструменты предоставляет платформа «1С:Предприятие 8» для решения этой задачи и как правильно их настроить.

Основные способы разграничения доступа и видимости

В платформе «1С:Предприятие 8» существует два основных подхода к ограничению видимости записей:

  1. Настройка прав RLS (Record Level Security) на уровне СУБД: аппаратный механизм ограничения доступа к строкам таблиц базы данных. Это наиболее надежный метод, гарантирующий защиту данных во всех формах, отчетах и запросах.
  2. Комбинированный программный метод (интерфейсный отбор + проверка при открытии): установка отборов в форме списка и проверка прав в самом документе. Подходит для пользовательских UI-ограничений, но не защищает от просмотра данных через консоль запросов или универсальные отчеты.

Решение 1. Использование механизма RLS (Record Level Security)

Проанализируем детально основной способ — настройку ограничения прав на уровне записей. Метод RLS позволяет настроить фильтрацию строк таблицы документа для права Чтение.

Рассмотрим порядок настройки RLS в Конфигураторе по шагам:

  1. Откроем Конфигуратор и перейдем к нужной роли (или создадим новую роль для пользователей с ограниченными правами).
  2. В дереве объектов роли найдем нужный документ и перейдем на вкладку Права.
  3. Выберем право Чтение и в нижнем окне добавим ограничение доступа к данным.
  4. Зададим условие ограничения на языке запросов 1С.

Рассмотрим пример условия RLS, когда документ должен быть виден пользователю только при совпадении реквизита с текущим пользователем:

ГДЕ РеквизитДокумента = &ТекущийПользователь

Если требуется ограничить видимость по конкретному значению перечисления или справочника, проанализируем следующий пример текста ограничения:

ГДЕ РеквизитДокумента = Значение(Перечисление.ТипыДокументов.Общий)

Важные технические особенности работы RLS, которые следует учитывать:

  1. Автоматическое исключение скрытых строк: При построении динамических списков и журналов документов платформа 1С автоматически подставляет ключевое слово РАЗРЕШЕННЫЕ в выборку. Благодаря этому скрытые документы просто не выводятся в списке, не вызывая ошибок доступа.
  2. Использование параметров сеанса: Динамические значения (например, &ТекущийПользователь) передаются в RLS через параметры сеанса, инициализируемые при старте системы.
  3. Влияние на производительность: Условия RLS вычисляются СУБД при каждом запросе к таблице. Старайтесь избегать сложных обращений через точку к ссылочным реквизитам в условиях RLS.
  4. Привилегированный режим: Если фоновые процедуры или служебные алгоритмы должны обрабатывать скрытые документы, используйте вызов метода УстановитьПривилегированныйРежим(Истина).

Решение 2. Программный интерфейсный отбор и проверка прав

Если использование RLS не подходит из-за потенциальной нагрузки на СУБД, а задачу нужно решить исключительно в пользовательском интерфейсе, разберем альтернативный программный вариант.

Данный подход состоит из двух последовательных шагов:

  1. Установка отбора в форме списка при открытии.
  2. Проверка прав в событии ПередОткрытием самой формы документа.

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


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    Если Не РольДоступна("ПолныеПрава") И ЭтотОбъект.РеквизитДокумента = Перечисления.ТипыДокументов.Секретный Тогда
        Предупреждение("У вас недостаточно прав для просмотра данного документа!");
        Отказ = Истина;
    КонецЕсли;

КонецПроцедуры

Выясним главное различие между методами: программный отбор лишь скрывает строки в конкретной форме списка. Если пользователю оставлено типовое право Чтение, он сможет получить доступ к данным через консоль запросов или сторонние обработки. Для полной безопасности всегда следует применять механизм RLS.

← На главную