Как увидеть все включенные права доступа на объект и ограничить редактирование табличной части в 1С:ERP?

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

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

Анализ прав доступа к объектам метаданных

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

  1. Использование Конфигуратора: Откройте конфигуратор, найдите в дереве метаданных ветку «Роли». Нажмите правой кнопкой мыши на любой роли и выберите пункт «Все роли». В открывшемся окне выберите интересующий вас объект (например, нужный документ). Система отобразит матрицу (шахматку), где по строкам будут перечислены все роли, а по столбцам — права доступа (чтение, добавление, изменение и т.д.).
  2. Использование 1С:EDT: Если вы ведете разработку в 1С:EDT, воспользуйтесь редактором прав. Он позволяет удобно фильтровать роли и предоставляет наглядную таблицу, в которой права доступа к объекту сгруппированы для быстрого анализа.
  3. Отчеты в режиме «1С:Предприятие»: Проверьте наличие отчетов по правам в разделе «Администрирование» — «Настройки пользователей и прав». Типовые конфигурации часто содержат отчеты «Права доступа», позволяющие выгрузить все разрешения для конкретного пользователя или группы доступа.

Программное ограничение редактирования реквизитов табличной части

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

Разберем, как это реализовать с помощью метода РольДоступна().

Вариант 1: Проверка через Роли

Этот способ является наиболее предпочтительным, так как он опирается на права, а не на конкретные наименования групп доступа, которые могут быть изменены пользователями. Реализуем логику в обработчике события ПередНачаломРедактирования:


&НаКлиенте
Процедура ТабличнаяЧастьПередНачаломРедактирования(Элемент, НоваяСтрока, Копирование)
    Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("МенеджерПоПродажам") Тогда
        Сообщить("У вас нет прав на редактирование этого реквизита!");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

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

Вариант 2: Проверка принадлежности к группе доступа

Если задача требует проверки именно по «Группе доступа» (справочник ГруппыДоступа), мы можем использовать серверный запрос к метаданным системы. Хотя это менее гибкий подход, чем использование ролей, он часто применяется в специфических бизнес-сценариях.


&НаСервере
Функция ПроверитьДоступПоГруппе()
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ГруппыДоступа.Ссылка
        |ИЗ
        |	Справочник.ГруппыДоступа КАК ГруппыДоступа
        |ГДЕ
        |	ГруппыДоступа.Пользователи.Пользователь = &ТекущийПользователь
        |	И ГруппыДоступа.Наименование = ""Менеджеры""";
    
    Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
    Результат = Запрос.Выполнить();
    
    Возврат НЕ Результат.Пустой();
КонецФункции

После создания этой функции, вы можете вызвать её в обработчике события формы: если функция возвращает Ложь, вы присваиваете Отказ = Истина, блокируя внесение правок.

Рекомендации по реализации

При настройке прав доступа рекомендуем придерживаться следующих правил:

  1. Приоритет ролей: Всегда старайтесь ограничивать доступ через Роли, так как это основной механизм платформы 1С.
  2. Использование расширений: Вносите изменения в типовые конфигурации только через «Расширения конфигурации». Это позволит вам безболезненно обновлять 1С:ERP в будущем, не теряя написанный код.
  3. Функциональные опции: Если реквизит нужно скрыть или заблокировать для всей группы пользователей, рассмотрите использование функциональных опций вместо написания кода в формах. Это сделает вашу конфигурацию чище и понятнее для поддержки.
  4. Библиотека стандартных подсистем (БСП): Используйте методы общего модуля УправлениеДоступом для проверок. Это стандарт индустрии, который обеспечивает совместимость с типовыми механизмами ограничения доступа (RLS).

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

← На главную