Как ограничить доступ пользователя только к определенной группе доступа партнеров в 1С:ERP

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

В крупных информационных системах на базе 1С:ERP Управление предприятием 2 часто возникает задача сегментации прав доступа. Типичный сценарий: необходимо сделать так, чтобы конкретный менеджер или отдел видел только «своих» контрагентов и не имел доступа к данным других подразделений. Для этого в системе предусмотрен механизм RLS (Record Level Security) — ограничение доступа на уровне записей.

В данной статье мы разберем ситуацию, когда пользователю нужно предоставить доступ только к определенной Группе доступа партнеров, и выясним, почему возникают ошибки вроде <Объект не найден> в документах при включении таких ограничений.

Различие между «Группами партнеров» и «Группами доступа партнеров»

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

  1. Группы партнеров — это иерархический справочник (папки), предназначенный для логической группировки партнеров в списке (например, «Оптовики», «Розничные», «Регионы»). Он не предназначен для настройки прав.
  2. Группы доступа партнеров — специальный аналитический разрез, который используется исключительно механизмом прав доступа. Именно этот справочник выбирается в настройках профиля группы доступа.

Для реализации задачи необходимо убедиться, что всем партнерам в системе присвоена соответствующая Группа доступа (поле на вкладке «Администрирование» в карточке партнера). Если вы хотите разделить доступ на «Общий» и «Тестовый», создайте соответствующие элементы в справочнике ГруппыДоступаПартнеров.

Включение механизма ограничения прав на уровне записей

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

  1. Перейдем в раздел НСИ и администрирование.
  2. Выберем пункт Настройка пользователей и прав.
  3. Развернем подраздел Группы доступа.
  4. Установим флаг Ограничивать доступ на уровне записей.

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

Настройка профиля группы доступа

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

Выполним следующие шаги:

  1. Создадим новый Профиль групп доступа.
  2. На вкладке Роли добавим роли, отвечающие за работу с партнерами (например, Чтение партнеров, Добавление и изменение партнеров).
  3. Перейдем на вкладку Ограничения доступа.
  4. Найдем в списке Группы доступа партнеров.
  5. Установим вид ограничения: «Все запрещены, исключения подобраны».
  6. Добавим в список разрешенных групп значение «Тест».

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

Анализ шаблонов RLS в конфигураторе

Иногда типовых настроек недостаточно, или система ведет себя не так, как ожидалось. Рассмотрим, как выглядит механизм ограничения изнутри. В конфигурации 1С:ERP для справочника Партнеры используется шаблон #ПоЗначениям. Проанализируем пример кода шаблона в роли:


#ПоЗначениям( "Справочник.Партнеры","Чтение","",
"ГруппыДоступаПартнеров","Ссылка", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )

Если вы видите, что в роли вместо ГруппыДоступаПартнеров указано ГруппыПартнеров, значит, ограничение настроено по папкам справочника, а не по группам доступа. Это критическая ошибка, которую нужно исправить в конфигураторе или выбрать другую роль, использующую правильный разрез доступа.

Почему в документах отображается «Объект не найден»?

Рассмотрим ситуацию, когда пользователь заходит в список «Заказы клиентов» и видит сами документы, но в колонке «Партнер» отображается <Объект не найден...>. Выясним причину этого явления:

Это происходит из-за частичного ограничения прав. У пользователя есть роль, которая разрешает чтение документов ЗаказКлиента без ограничений RLS, но при этом действует ограничение на чтение справочника Партнеры. Система позволяет увидеть заголовок документа, но когда обращается к данным связанного партнера, RLS блокирует доступ к этой записи, выдавая ошибку представления объекта.

Чтобы решить эту проблему и полностью скрыть документы «чужих» партнеров, необходимо:

  1. Проверить все роли, назначенные пользователю. Если хотя бы одна роль (например, Чтение заказов клиентов без ограничений) дает полный доступ к документам, RLS на справочник партнеров не скроет сам документ.
  2. В ролях для чтения документов также должен быть прописан шаблон RLS, который проверяет права по полю Партнер.
  3. Типовой шаблон для документов в ERP обычно выглядит так:
    
    #ПоЗначениям( "Документ.ЗаказКлиента","Чтение","",
    "ГруппыДоступаПартнеров","Партнер", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
    

Обновление ключей доступа

В современных версиях 1С:ERP (начиная с 2.4) используется производительный режим RLS, основанный на предварительно рассчитанных ключах доступа. Если вы настроили права, но изменения не вступили в силу, или данные отображаются некорректно, выполните обновление данных:

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

Заключение: Настройка доступа по группам партнеров требует комплексного подхода. Недостаточно просто ограничить справочник — необходимо убедиться, что связанные документы также защищены правилами RLS, а у пользователя отсутствуют «полные» роли, игнорирующие ограничения.

← На главную