Как программно проверить, назначена ли пользователю определенная роль в 1С?

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

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

Использование функции РольДоступна()

Самый простой и распространенный способ узнать, назначена ли пользователю конкретная роль — это использование глобального метода РольДоступна(). Этот метод позволяет проверить, входит ли указанная роль в набор прав текущего пользователя.

Разберем синтаксис и правила использования:

Посмотрим на практический пример использования:


Если Не РольДоступна("Менеджер") Тогда
    Сообщить("У вас недостаточно прав для выполнения этой операции!");
    Возврат;
КонецЕсли;

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


мдРоль = Метаданные.Роли["Менеджер"];
Если РольДоступна(мдРоль) Тогда
    // Действия для менеджера
КонецЕсли;

Проверка конкретного права через ПравоДоступа()

Часто программисты пытаются привязаться к имени конкретной роли, например, «Бухгалтер». Однако такой подход не всегда является лучшей практикой. В типовых конфигурациях, таких как 1С:Бухгалтерия 3.0, права часто распределены по разным ролям, и пользователь может обладать правами бухгалтера, даже не имея роли с названием «Бухгалтер».

Для проверки возможности выполнения конкретного действия над объектом метаданных правильнее использовать функцию ПравоДоступа().

Разберем преимущества этого подхода:

  1. Устойчивость к изменениям: Ваш код будет работать, даже если администратор создаст новую роль или изменит состав текущей роли.
  2. Абстракция: Мы проверяем не «кто пользователь», а «может ли он совершать данное действие».

Пример проверки права на чтение справочника:


Если ПравоДоступа("Чтение", Метаданные.Справочники.Контрагенты) Тогда
    // Пользователь имеет право на чтение справочника
КонецЕсли;

Рекомендации для типовых конфигураций (БСП)

Если вы ведете разработку в типовой конфигурации (БП 3.0, УТ 11, ERP), помните, что в них используется Библиотека Стандартных Подсистем (БСП). В таких системах реализован механизм Профилей групп доступа.

Вместо жесткой проверки ролей программным кодом, рассмотрите следующие советы:

Итоги и выводы

Мы проанализировали основные инструменты для проверки прав пользователя:

  1. Для проверки наличия роли используйте РольДоступна().
  2. Для проверки прав на действия с объектами данных используйте ПравоДоступа().
  3. Всегда старайтесь отдавать предпочтение проверке прав на действия, а не проверке принадлежности пользователя к определенной роли.
  4. Если вы работаете в БП 3.0, обращайтесь к методам подсистемы УправлениеДоступом, чтобы обеспечить совместимость с типовой логикой настройки прав.

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

← На главную