Как массово назначить разрешенные организации сотням пользователей в 1С:Бухгалтерия Предприятия КОРП после включения RLS?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При переходе от работы с одной организацией к учету нескольких организаций в 1С:Бухгалтерия Предприятия КОРП (БП КОРП), особенно когда в системе задействованы сотни пользователей, возникает критически важная задача: как эффективно и быстро настроить ограничения доступа к данным на уровне записей (RLS), чтобы каждый пользователь видел только разрешенные для него организации. Ручное назначение разрешений для каждого из сотен пользователей является трудоемким и неэффективным процессом. В этом руководстве мы рассмотрим проверенные подходы и инструменты, которые помогут нам автоматизировать или значительно упростить эту задачу.

1. Активация механизма RLS в 1С:Бухгалтерии Предприятия КОРП

Прежде чем мы приступим к массовому назначению разрешений, нам необходимо убедиться, что механизм RLS активирован в нашей базе. Механизм ограничения доступа на уровне записей является неотъемлемой частью функциональности 1С:Предприятия и позволяет нам управлять видимостью данных для различных пользователей в зависимости от их роли и настроек доступа. Рассмотрим процесс его включения по шагам:

  1. Откройте конфигурацию 1С:Бухгалтерия Предприятия КОРП в режиме "Предприятие" под учетной записью с административными правами.
  2. Перейдите в раздел "Администрирование". Обычно этот раздел расположен в навигационной панели слева или в верхнем меню.
  3. В разделе "Администрирование" найдите пункт "Настройка пользователей и прав" и перейдите в него.
  4. В открывшейся форме "Настройка пользователей и прав" нам нужно найти и установить флажок "Ограничивать доступ на уровне записей". Этот флажок является ключевым для активации RLS в системе.
  5. После установки флажка, система, возможно, предложит обновить ключи доступа. Нам следует подтвердить это действие, чтобы изменения вступили в силу.

После выполнения этих шагов механизм RLS будет активен, и система начнет применять правила ограничения доступа, которые мы определим. На этом этапе все пользователи, скорее всего, потеряют доступ ко многим данным, пока мы не настроим для них соответствующие разрешения.

2. Эффективное использование групп доступа для массового назначения разрешений

Самый эффективный и рекомендуемый способ массового назначения разрешенных организаций для большого количества пользователей — это использование "Профилей групп доступа" и "Групп доступа". Этот подход позволяет нам централизованно управлять правами, значительно сокращая объем ручной работы и упрощая дальнейшее администрирование. Несмотря на то, что в рамках обсуждения на форуме возникла некоторая путаница относительно наличия групп доступа в БП КОРП, важно понимать, что это стандартный механизм БСП (Библиотеки стандартных подсистем), который применяется и в БП КОРП, где "персональные группы доступа" по сути реализуются через общую систему RLS, формируя индивидуальный набор доступных данных для каждого пользователя, даже если он наследуется от групп.

Разберем, как мы можем использовать этот механизм:

  1. Создание Профилей групп доступа:

    Нам необходимо определить, какие типы доступа нам требуются. Например, если у нас есть несколько организаций (ООО "Ромашка", ЗАО "Лютик"), и бухгалтеры работают только с одной из них, мы можем создать профили, которые будут определять набор ролей и базовых прав.

    Перейдите в "Администрирование" -> "Настройка пользователей и прав" -> "Профили групп доступа". Здесь мы можем создать новый профиль или использовать существующий, чтобы определить, какие объекты метаданных и в каком объеме будут доступны пользователям, входящим в группу с этим профилем.

  2. Формирование Групп доступа:

    После создания профилей мы приступаем к созданию самих групп доступа. Каждая группа доступа будет ассоциироваться с определенным профилем и, что самое главное для нашей задачи, с набором разрешенных организаций.

    Перейдите в "Администрирование" -> "Настройка пользователей и прав" -> "Группы доступа". Здесь мы создадим новые группы, например:

    • "Бухгалтеры ООО 'Ромашка'": Мы назначим этой группе профиль, соответствующий роли бухгалтера, и явно укажем, что она имеет доступ только к организации "ООО Ромашка".
    • "Бухгалтеры ЗАО 'Лютик'": Аналогично, этой группе будет назначен соответствующий профиль и доступ только к организации "ЗАО Лютик".
    • "Руководство (все организации)": Если некоторым пользователям (например, руководству) нужен доступ ко всем организациям, мы можем создать отдельную группу, указав в ней доступ ко всем необходимым организациям.

    Для каждой группы мы должны явно указать ограничение доступа по организациям. В форме группы доступа есть специальные настройки, позволяющие выбрать список доступных элементов справочника Организации.

  3. Назначение пользователей в Группы доступа:

    Теперь, когда у нас есть настроенные группы доступа с определенными разрешениями по организациям, мы можем массово назначать пользователей в эти группы.

    В форме каждой группы доступа есть вкладка "Участники", где мы можем добавить или удалить пользователей. Поскольку у нас сотни пользователей, мы можем использовать различные подходы для их добавления:

    • Ручное добавление: Если количество пользователей в одной группе не очень велико.
    • Групповое изменение пользователей: В списке пользователей 1С (Администрирование -> Настройка пользователей и прав -> Пользователи) мы можем выделить нескольких пользователей и через контекстное меню или кнопку "Изменить" массово добавить их в определенную группу доступа.

Этот подход значительно упрощает администрирование, так как при появлении новой организации или изменении прав достаточно изменить настройки одной группы, а не сотен пользователей. Кроме того, в БП КОРП обособленное подразделение рассматривается как элемент справочника Организации, и ограничения по нему настраиваются аналогично.

3. Производительность RLS и активация "Производительного режима"

Включение RLS, хотя и является мощным инструментом безопасности, может существенно повлиять на производительность системы. При каждом обращении пользователя к данным, система выполняет дополнительные проверки на соответствие правилам RLS, что увеличивает нагрузку на базу данных и может замедлить работу, особенно при большом количестве пользователей и сложных ограничениях. Для минимизации этого влияния и оптимизации скорости работы существует "производительный режим RLS".

Мы проанализируем, почему это происходит и как "производительный режим RLS" помогает это mitigation. Разберем, как его активировать и какие регламентные задания задействованы.

В "производительном режиме" система предварительно рассчитывает и кэширует так называемые "ключи доступа". Эти ключи представляют собой предвычисленные соответствия между пользователями/группами доступа и разрешенными им объектами (в нашем случае – организациями). Таким образом, при запросе данных вместо выполнения сложной логики RLS в реальном времени, система может быстро проверить наличие соответствующего ключа доступа.

Для активации производительного режима выполним следующие шаги:

  1. Перейдите в "Администрирование" -> "Настройка пользователей и прав".
  2. В секции "Группы доступа" или связанных настройках найдите пункт "Вариант работы".
  3. Установите значение этого параметра в "Производительный".

После активации производительного режима система будет использовать кэшированные ключи доступа. Обновление этих ключей выполняется регламентным заданием. Нам следует убедиться, что регламентное задание "Обновление доступа на уровне записей" активно и корректно настроено. Мы можем настроить его расписание так, чтобы оно запускалось с оптимальной частотой, например, в нерабочее время, чтобы не создавать дополнительной нагрузки во время пиковой активности пользователей. В случае необходимости, обновление ключей доступа можно запустить и вручную через специальную обработку, доступную администраторам.

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

4. Инструменты для массовых изменений (если групп доступа недостаточно)

Хотя группы доступа являются наиболее предпочтительным способом управления правами в 1С:Бухгалтерия Предприятия КОРП, могут возникнуть ситуации, когда их стандартных возможностей оказывается недостаточно для решения специфических задач массового изменения или первоначального назначения. В таких случаях нам могут пригодиться дополнительные инструменты.

Использование обработки "Групповое изменение реквизитов"

В типовых конфигурациях 1С, включая БП КОРП, существует мощная и универсальная обработка "Групповое изменение реквизитов" (иногда также называемая "Групповое изменение объектов"). Эта обработка изначально предназначена для массового изменения реквизитов различных объектов конфигурации (например, номенклатуры, документов). Однако ее функционал позволяет не только изменять стандартные реквизиты, но и выполнять произвольный алгоритм на встроенном языке. Опытный администратор или разработчик может использовать эту возможность для программного изменения настроек RLS у множества пользователей, если стандартные механизмы групп доступа не полностью покрывают первоначальную потребность в массовом назначении.

Рассмотрим, как мы могли бы использовать эту обработку для наших целей:

  1. Откройте обработку "Групповое изменение реквизитов" (обычно доступна через "Администрирование" -> "Обслуживание" -> "Групповое изменение реквизитов").
  2. В списке объектов для изменения выберите "Пользователи".
  3. Мы можем использовать отбор для выбора конкретных пользователей, которых нам нужно изменить.
  4. Самое интересное для нашей задачи — это возможность добавить "Произвольный алгоритм". Здесь мы можем написать код на встроенном языке 1С, который будет выполняться для каждого выбранного пользователя.

Пример гипотетического кода для произвольного алгоритма (это лишь концепция, реальная реализация может быть сложнее и зависеть от структуры хранения RLS в текущей версии БП КОРП):


Для Каждого ТекущийПользователь Из ВыбранныеОбъекты Цикл
    // Предположим, что мы хотим добавить организацию "ООО Новый Век"
    // к списку разрешенных организаций для текущего пользователя.
    // Нам нужно найти регистр сведений, который хранит индивидуальные настройки RLS для пользователей
    // или программно добавить пользователя в нужную группу доступа.
    // Важно: конкретный код сильно зависит от внутренней структуры хранения прав в текущей конфигурации БП.
    
    // Пример (упрощенный, может не работать напрямую, требует анализа структуры данных):
    // Получим объект пользователя
    ОбъектПользователя = ТекущийПользователь.ПолучитьОбъект();
    
    // Если настройки разрешенных организаций хранятся в каком-либо регистре,
    // связанном с пользователем, мы можем добавить туда новую запись.
    // Например, если существует регистр сведений "НастройкиДоступаПоОрганизациямПользователей"
    // (название гипотетическое), который связывает пользователя и организацию.
    
    // Запрос к существующим настройкам доступа пользователя
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    НастройкиДоступаПоОрганизациямПользователей.Организация КАК Организация
    |ИЗ
    |    РегистрСведений.НастройкиДоступаПоОрганизациямПользователей КАК НастройкиДоступаПоОрганизациямПользователей
    |ГДЕ
    |    НастройкиДоступаПоОрганизациямПользователей.Пользователь = &Пользователь";
    
    Запрос.УстановитьПараметр("Пользователь", ОбъектПользователя.Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    // Находим ссылку на новую организацию
    НоваяОрганизацияСсылка = Справочники.Организации.НайтиПоНаименованию("ООО Новый Век");
    
    Если НоваяОрганизацияСсылка <> Неопределено Тогда
        // Проверяем, есть ли уже эта организация в списке
        Найдена = Ложь;
        Для Каждого СтрокаТЗ Из РезультатЗапроса Цикл
            Если СтрокаТЗ.Организация = НоваяОрганизацияСсылка Тогда
                Найдена = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Если Не Найдена Тогда
            // Создаем новую запись в регистре сведений
            Движение = РегистрыСведений.НастройкиДоступаПоОрганизациямПользователей.СоздатьМенеджерЗаписи();
            Движение.Пользователь = ОбъектПользователя.Ссылка;
            Движение.Организация = НоваяОрганизацияСсылка;
            Попытка
                Движение.Записать();
                Сообщить("Для пользователя " + ОбъектПользователя.Наименование + " добавлена организация ООО Новый Век.");
            Исключение
                Сообщить("Ошибка при добавлении организации для пользователя " + ОбъектПользователя.Наименование + ": " + ОписаниеОшибки());
            КонецПопытки;
        Иначе
            Сообщить("Для пользователя " + ОбъектПользователя.Наименование + " организация ООО Новый Век уже разрешена.");
        КонецЕсли;
    Иначе
        Сообщить("Организация 'ООО Новый Век' не найдена в справочнике.");
    КонецЕсли;
    
    // Если мы работаем через группы доступа, то здесь логика будет заключаться
    // в добавлении пользователя в соответствующую группу доступа,
    // например, в группу "Бухгалтеры ООО Новый Век".
    // Пример (также упрощенный):
    // ГруппаДоступа = Справочники.ГруппыДоступа.НайтиПоНаименованию("Бухгалтеры ООО Новый Век");
    // Если ГруппаДоступа <> Неопределено Тогда
    //     ДобавитьПользователяВГруппу(ОбъектПользователя.Ссылка, ГруппаДоступа.Ссылка); // Нужно реализовать функцию
    // КонецЕсли;
    
КонецЦикла;

Прежде чем использовать подобный подход, мы всегда должны тщательно проанализировать структуру хранения настроек доступа в конкретной версии конфигурации БП КОРП, чтобы убедиться в правильности прямого обращения к данным. Рекомендуется использовать эту функциональность с особой осторожностью и только после полного резервного копирования базы данных.

Разработка внешних обработок

В случаях, когда типовой функционал "Группового изменения реквизитов" оказывается недостаточным, или когда требуется более сложная логика для определения разрешений, мы можем создать специализированные внешние обработки. Этот подход требует навыков программирования на платформе 1С:Предприятие, но предоставляет максимальную гибкость.

Внешняя обработка может выполнять следующие действия:

  1. Запрашивать список пользователей из базы данных.
  2. Запрашивать список организаций.
  3. На основе заранее определенных правил (например, сопоставление по подразделениям, отделам или другим атрибутам пользователя) программно определять, какие организации должны быть доступны каждому пользователю.
  4. Выполнять программное добавление пользователей в существующие группы доступа, либо, в крайнем случае, прямое манипулирование регистрами сведений, которые хранят настройки RLS (этот вариант наименее желателен из-за риска нарушения целостности данных при некорректном использовании).
  5. Запускать обновление ключей доступа RLS, если активирован производительный режим.

Разработка внешней обработки позволяет нам создать инструмент, который точно соответствует нашим уникальным требованиям и может быть повторно использован в будущем для корректировки или расширения прав доступа.

5. Хранение настроек RLS

Для более глубокого понимания и возможности написания собственных обработок, нам полезно знать, как хранятся настройки RLS в 1С:Предприятии. Настройки RLS хранятся на нескольких уровнях:

  1. Роли: Базовые ограничения доступа определяются на уровне ролей в конфигурации. Здесь указываются общие правила, например, "доступ к документам 'Поступление товаров и услуг' только если в них указана текущая организация".
  2. Профили групп доступа: Профили объединяют набор ролей и могут содержать дополнительные ограничения.
  3. Группы доступа: Сами группы доступа связывают пользователей с профилями и, что критически важно для нашей задачи, содержат списки конкретных элементов справочников (например, Организации, Подразделения), к которым разрешен доступ.
  4. Регистры сведений: Для работы производительного режима RLS используются специальные регистры сведений (например, КлючиДоступа, КлючиДоступаКОбъектам, КлючиДоступаПользователей), которые содержат предрассчитанные ключи доступа к объектам и пользователям. Эти регистры обновляются регламентными заданиями.

Понимание этой иерархии помогает нам выбирать наиболее подходящий способ решения задачи. В подавляющем большинстве случаев работа через стандартные механизмы "Групп доступа" является наиболее безопасной и поддерживаемой.

Заключение

Для массовой установки разрешенных организаций сотням пользователей в 1С:Бухгалтерия Предприятия КОРП после включения RLS, наиболее эффективным и правильным подходом является грамотная настройка "Профилей групп доступа" и "Групп доступа". Этот метод не только решает проблему массового назначения, но и значительно упрощает дальнейшее администрирование системы.

В случаях, когда стандартных групп доступа оказывается недостаточно для сложных первоначальных настроек или специфических корректировок, мы можем рассмотреть использование стандартной обработки "Групповое изменение реквизитов" с применением произвольного алгоритма или разработку собственной внешней обработки на платформе 1С. При этом всегда необходимо учитывать потенциальное влияние RLS на производительность системы и активно использовать "производительный режим RLS" для минимизации замедлений. Не забывайте о важности регулярного резервного копирования перед внесением глобальных изменений в систему.

← На главную