К статье
Практический материал

Администрирование · 10 мин

Как проверить наличие роли у пользователя в 1С

Как проверить наличие роли у пользователя в 1С: функция РольДоступна, проверка через конфигуратор, СКД и права доступа. Примеры кода и типичные ошибки.

Проверка роли пользователя — одна из базовых задач при разработке и администрировании конфигураций 1С. Она нужна, когда логика программы должна различаться в зависимости от прав: например, показывать кнопку только менеджерам по продажам или запрещать проведение документа обычным пользователям.

В платформе 1С:Предприятие 8 есть встроенный механизм для такой проверки — функция РольДоступна(), а также административные инструменты: список пользователей в конфигураторе, настройка ролей в режиме предприятия и отчёт по правам доступа. Ниже разобраны все рабочие способы — от программной проверки до визуального контроля без изменения кода.

Важно понимать разницу: роль — это набор прав на объекты метаданных, а не «должность» пользователя. Один пользователь может иметь несколько ролей, и итоговые права складываются как объединение прав всех назначенных ролей.

Как устроены роли и права в 1С

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

Ключевая особенность механизма: права пользователя — это сумма прав всех его ролей. Если хотя бы одна роль разрешает действие, оно считается разрешённым. Поэтому проверка «есть ли роль» и проверка «есть ли право на конкретный объект» — разные задачи, и решать их нужно разными средствами.

Также существуют предопределённые роли в типовых конфигурациях, например «ПолныеПрава» или «АдминистраторСистемы». В конфигурациях на базе БСП (Библиотека стандартных подсистем) вместо прямого назначения ролей часто используются профили групп доступа — это надстройка, которая в конечном счёте тоже сводится к ролям.

Программная проверка через РольДоступна()

Основной способ проверить наличие роли у текущего пользователя — встроенная функция РольДоступна(<ИмяРоли>). Она принимает строковое имя роли, как оно задано в конфигураторе, и возвращает булево значение: Истина, если роль назначена текущему пользователю, и Ложь в противном случае.

Если РольДоступна("ПолныеПрава") Тогда

// Действия, доступные только пользователю с полными правами

Элементы.КнопкаНастройка.Видимость = Истина;

Иначе

Элементы.КнопкаНастройка.Видимость = Ложь;

КонецЕсли;

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

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

bsl
Если РольДоступна("ДобавлениеИзменениеДокументов") Тогда
    Сообщить("Роль назначена текущему пользователю");
Иначе
    Сообщить("Роль не назначена");
КонецЕсли;

Проверка права доступа вместо проверки роли

Часто настоящая цель — не узнать про роль, а убедиться, что пользователь может выполнить конкретное действие. Для этого предназначена функция ПравоДоступа(<Право>, <ОбъектМетаданных>). Она учитывает все роли пользователя сразу и возвращает итоговое право.

Если ПравоДоступа("Изменение", Метаданные.Документы.РеализацияТоваровУслуг) Тогда

// Пользователь может изменять документы реализации

КонецЕсли;

Такой подход устойчивее к изменениям конфигурации: если администратор создаст новую роль с теми же правами, код с ПравоДоступа() продолжит работать корректно, а проверка через РольДоступна() потребует доработки. Прямую проверку роли оправданно применять, когда логика жёстко привязана к конкретной роли — например, при разграничении интерфейса.

Что выбрать для проверки

РольДоступна()

Когда логика привязана к конкретной роли: видимость элементов интерфейса, особые сценарии для администраторов. Ограничение: не учитывает новые роли с аналогичными правами.

ПравоДоступа()

Когда важен факт возможности действия над объектом: изменение документа, чтение регистра. Учитывает все роли суммарно, устойчиво к изменениям в настройке прав.

Профили групп доступа (БСП)

В типовых конфигурациях с БСП — проверка через подсистему управления доступом. Рекомендуется для кода, встроенного в типовую конфигурацию.

Как проверить роль другого пользователя

Функция РольДоступна() всегда относится к текущему сеансу. Если нужно узнать, какие роли назначены другому пользователю, применяется объект ПользователиИнформационнойБазы. Пример кода, выполняемого на сервере с достаточными правами:

ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ");

Если ПользовательИБ <> Неопределено Тогда

Для Каждого Роль Из ПользовательИБ.Роли Цикл

Сообщить(Роль.Имя);

КонецЦикла;

КонецЕсли;

Для проверки конкретной роли у конкретного пользователя коллекцию ролей перебирают и сравнивают имена. Учтите, что доступ к ПользователиИнформационнойБазы требует права «Администрирование» — обычный пользователь такой код выполнить не сможет.

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

Визуальная проверка ролей без программирования

Администратор может проверить роли пользователя без написания кода. В конфигураторе откройте меню «Администрирование → Пользователи», выберите нужного пользователя и перейдите на вкладку «Прочие» — там отображается список доступных ролей с отметками о назначении.

В режиме 1С:Предприятие в типовых конфигурациях роли видны в карточке пользователя: раздел «Администрирование → Настройки пользователей и прав → Пользователи». Там же через группы доступа видно, какие профили (а значит, и роли) действуют для пользователя.

Дополнительно в ряде типовых решений есть отчёт «Права доступа» или аналогичный, который показывает матрицу «пользователь — объект — право». Он удобен, когда нужно понять, почему пользователю доступно или недоступно конкретное действие, а не просто перечислить роли.

Проверка ролей пользователя в конфигураторе
  1. 1
    Откройте конфигуратор и войдите под учётной записью с правами администратора
  2. 2
    Перейдите: Администрирование → Пользователи
  3. 3
    Откройте нужного пользователя двойным щелчком
  4. 4
    Перейдите на вкладку «Прочие» и найдите список ролей
  5. 5
    Отмеченные роли — назначены пользователю; сравните с требуемой ролью

Типичные ошибки при проверке ролей

Самая распространённая ошибка — опечатка в имени роли. Строка передаётся в РольДоступна() как литерал, поэтому компилятор её не проверяет, и ошибка проявляется только в момент выполнения. Чтобы снизить риск, выносите имена ролей в константы или функции-проверки.

Вторая ошибка — проверка роли вместо проверки права. Если завтра появится новая роль с теми же правами, логика «сломается» незаметно: пользователь с нужными правами не пройдёт проверку. Третья типичная ситуация — тестирование только под полными правами, когда проверка РольДоступна() ведёт себя иначе, чем у рядового пользователя, и дефект всплывает уже в рабочей базе.

Типичные ошибки
01
Опечатка в имени роли — ошибка возникает только в момент выполнения, а не при компиляции
02
Проверка роли вместо ПравоДоступа() — код перестаёт работать при добавлении новых ролей с теми же правами
03
Тестирование только под полными правами — у рядового пользователя логика ведёт себя иначе
04
Игнорирование профилей групп доступа в БСП — роль назначена через профиль, а разработчик ищет её в напрямую заданных ролях
Контрольные точки

Как проверить результат

Результат РольДоступна()
Норма

Возвращает Истина для пользователя с ролью и Ложь без неё

Тревожный признак

Всегда Истина (проверка под полными правами) или ошибка исполнения (неверное имя роли)

Видимость элементов интерфейса
Норма

Элементы скрываются и показываются согласно ролям у разных тестовых пользователей

Тревожный признак

Поведение одинаковое для всех — проверка не работает или не вызывается

Права на объекты
Норма

ПравоДоступа() отражает суммарные права всех ролей пользователя

Тревожный признак

Право есть, а РольДоступна() = Ложь — использован неподходящий метод проверки

Ответы на частые вопросы

РольДоступна() возвращает Истина у всех пользователей — почему?

Скорее всего, проверка выполняется под пользователем с ролью «ПолныеПрава» либо код работает в привилегированном режиме в контексте, где права не ограничиваются. Протестируйте логику под тестовой учётной записью с ограниченным набором ролей.

Можно ли проверить роль на клиенте в управляемом приложении?

Да, функция РольДоступна() доступна на тонком и веб-клиенте, однако для надёжности бизнес-логику, связанную с безопасностью, лучше дублировать на сервере: клиентскую проверку потенциально можно обойти.

Как узнать имя роли, если я не знаю конфигурацию?

Откройте в конфигураторе ветку «Общие → Роли» дерева конфигурации — там перечислены все роли с их именами. Именно эти имена (не синонимы) нужно передавать в РольДоступна().

Чем профиль группы доступа отличается от роли?

Профиль — это настройка в режиме предприятия (в конфигурациях с БСП), которая при записи назначает пользователю соответствующие роли. Роль — объект метаданных; профиль — инструмент администратора для управления ролями без конфигуратора.

Роль назначена, но действие всё равно недоступно. В чём причина?

Проверьте ограничения доступа на уровне записей (RLS) — они могут запрещать доступ к конкретным данным даже при наличии роли. Также убедитесь, что пользователь перезашёл в базу после изменения ролей: в некоторых случаях требуется новый сеанс.

Как проверить роли сразу для всех пользователей базы?

Напишите серверную процедуру, которая перебирает ПользователиИнформационнойБазы.ПолучитьПользователей() и для каждого анализирует коллекцию Роли. Для выполнения нужны административные права; в типовых конфигурациях проще воспользоваться штатным отчётом по правам доступа.

Итог

Что важно запомнить

Для текущего пользователя применяйте РольДоступна("ИмяРоли"), для проверки фактической возможности действия — ПравоДоступа(). Роли других пользователей смотрите через ПользователиИнформационнойБазы или визуально в конфигураторе. Тестируйте логику под ограниченными правами и избегайте опечаток в именах ролей.