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