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