В крупных компаниях часто возникает задача разграничения прав доступа, когда каждый менеджер должен видеть и работать только с «своими» клиентами. В системе 1С:ERP Управление предприятием (а также в 1С:Комплексная автоматизация) для этих целей используется механизм RLS (Record Level Security) — ограничение доступа на уровне записей. Рассмотрим подробно, как реализовать эту задачу, начиная от типовых настроек и заканчивая программными доработками.
Прежде чем приступать к настройке конкретных прав, необходимо убедиться, что в системе активирована сама возможность использования RLS. Разберем этот процесс по шагам:
Важно понимать, что включение этой опции может существенно повлиять на производительность системы, так как к каждому запросу к базе данных будут добавляться дополнительные условия проверки прав. Чтобы система работала быстро, настройка производительного RLS в 1С:ERP 2.5 должна быть выполнена в соответствии с рекомендациями по заполнению таблиц прав.
Самый простой и рекомендуемый методистами 1С способ — это использование специальных групп доступа. Выясним причину, по которой это удобнее прямой привязки к менеджеру: один контрагент может обслуживаться несколькими сотрудниками, или структура отдела продаж может измениться. Важно заранее изучить архитектуру групп доступа контрагентов, чтобы избежать конфликтов ролей в будущем.
Рассмотрим алгоритм настройки через группы доступа:
Контрагенты необходимо заполнить реквизит Группа доступа. Если это поле не отображается, его нужно включить в настройках формы.После создания профиля нужно создать саму Группу доступа, включить в нее нужных пользователей и на вкладке Ограничения доступа указать конкретные Группы доступа контрагентов, к которым разрешен просмотр и редактирование.
Если бизнес-процесс требует жесткой привязки именно к реквизиту Основной менеджер, указанному в карточке контрагента, проанализируем возможности системы. В типовых конфигурациях на базе БСП (Библиотеки стандартных подсистем) часто предусмотрен вид доступа по пользователям.
Посмотрим на пример логики работы: в профиле группы доступа мы указываем, что доступ к справочнику Контрагенты ограничивается по значению реквизита. Однако, если стандартного вида доступа ПоМенеджеру нет в списке, можно внедрить ограничение доступа по основному менеджеру через расширение (поможет расширение для ограничения доступа к контрагентам по менеджеру), используя готовые шаблоны кода.
Для программиста 1С задача может потребовать написания кастомного запроса в ограничении прав доступа. Разберем, как выглядит типичный шаблон RLS для такой задачи. В конфигураторе необходимо открыть роль, найти объект Справочник.Контрагенты и для права Чтение добавить ограничение.
Рассмотрим пример кода шаблона:
#ПоЗначениям( "Справочник.Контрагенты","Чтение","",
"ГруппыДоступности","Ссылка",
"Пользователи","ОсновнойМенеджер",
"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","")
В данном примере используется стандартный шаблон #ПоЗначениям. Разберем параметры подробнее: мы указываем объект метаданных, тип права, а затем связку между полями таблицы и видами доступа. Система автоматически подставит в запрос условие, которое проверит, совпадает ли ОсновнойМенеджер в карточке клиента с текущим авторизованным пользователем.
Многие администраторы систем 1С сталкиваются с замедлением работы динамических списков после внедрения RLS. Проанализируем ситуацию и выделим основные рекомендации по ускорению:
RLS. Дополнительно стоит учитывать новое в платформе 8.3.24 по ускорению механизмов проверки прав доступа, что позволяет значительно повысить отзывчивость интерфейса.ОсновнойМенеджер, ГруппаДоступа), должны быть проиндексированы. Это критически важно для оптимизации запросов динамических списков в крупных информационных базах.Отдельно стоит отметить, что RLS влияет и на скорость формирования отчетов. Если какой-то отчет не должен учитывать ограничения прав, для него можно настроить выполнение в привилегированном режиме, что значительно его ускорит.
Выясним основные причины, по которым ограничение может не работать, и разберем типичные ошибки настройки прав (в этом поможет обработка для аудита прав пользователей и профилей):
Контрагенты установлены права без ограничений (или стоит флаг Полные права), RLS работать не будет.RLS рекомендуется перезапустить сеанс пользователя, а иногда и очистить серверный кэш метаданных. Если же права не обновляются, может потребоваться точечный пересчет прав доступа, чтобы принудительно применить изменения.Для того чтобы убедиться, что менеджеры видят только свои данные, воспользуемся встроенным отчетом. Перейдем в Администрирование — Настройки пользователей и прав — Группы доступа и нажмем кнопку Отчет по правам доступа. Выбрав конкретного пользователя и объект Справочник.Контрагенты, мы увидим детальную расшифровку: какие роли дают доступ и какие условия RLS наложены на данные. Для более глубокого аудита существующих настроек можно использовать специальные отчеты, которые показывают всех пользователей в разрезе групп доступа или позволяют провести комплексную проверку ролей и профилей у пользователя — это отчет для анализа прав доступа и ограничений RLS. А самым наглядным способом проверки будет формирование списка контрагентов конкретного менеджера, чтобы посмотреть на результат его глазами.
Таким образом, комбинируя типовые механизмы групп доступа и возможности платформы по кастомизации шаблонов, можно выстроить гибкую и производительную систему разграничения прав, отвечающую требованиям безопасности любого бизнеса.