1с проверить роль текущего пользователя

Обновлено: 19.07.2024

(2) РольДоступна() - проверяет доступность роли для текущего пользователя
Если же надо проверить для другого пользователя, точнее для ссылки на справочник Пользователи то обычно в типовых у этого справочника есть реквизит ИдентификаторПользователяИБ (это в УТ11) либо по по коду/имени надо найти Пользователя ИБ - обратиться к коллекции ролей
ПользователиИнформационнойБазы.НайтиПоИмени(<Имя>).Роли
НайтиПоУникальномуИдентификатору(<Идентификатор>).Роли.Содержит(Метаданные.Роли.ПолныеПрава)

DoctorRoot; maxst22; Kovekh; jane_de_rio; Kuzya_brаtsk; json; Serg_buz; sermalp; itriot11; kanat1; pihy; Afa_fil; adhocprog; Trapezaspb; mailrum2004; + 15 – Ответить

Спасибо! Но теперь у меня возникла другая задача : каждый пользователь имеет полные права.Я создаю роль,кто. изменяет справочник "Номенклатура". Мне нужно после проверки на роль "Изменение номеклатуры" при ее отсутствии запретить изменять номенклатуру.
Т.е
Если РольДоступна("ИзменениеНоменклатуры") Тогда
.
Иначе

запрет изменения номенклатуры
КонецЕсли;

(4) Все правильно написано, используйте приведенный Вами код. Зачем такие сложности и по тексту программы менять стандартную конфигурацию? Не проще ли (думаю, и правильней) дать пользователю другую роль (не полные права) и ограничить доступ к номенклатуре при помощи механизма ограничения прав доступа на уровне записей? Для этого вначале указывается настройка параметров доступа на уровне записей (в 1С:Комплексная автоматизация, например, это реализовано через Операции -> Константы -> Настройка параметров доступа на уровне записей. Там устанавливается флаг "Ограничить доступ на уровне записей по видам объектов" -> Номенклатура). Затем настраиваются группы пользователей: должна быть "Без ограничения прав", и в Вашем случае - группа с ограничением на запись номенклатуры. После этого распределите своих пользователей на группы пользователей. Я попробовала, как вы сказали, у меня пользователь администратор, стоят полные права, галочку в константах я поставила, создала группу ограничения прав, в настройках доступа указала даже конкретную группу номенклатуры, но независимо от того настраиваю ли я или нет этот доступ перезагружая программу всё равно номенклатуру можно изменить. Может я что-то не так делаю? И все-таки можно ли это как-то прописать в конфигураторе?

Вариант 1. Вам придется либо "уйти" от полных прав, создать индивидуальные роли для каждой группы пользователей, у всех созданных ролей убрать доступ к справочнику Номенклатура. Создать роль например "НоменклатураДобавлениеИзменение", у которой будет соответствующий доступ к справочнику Номенклатура, и назначить эту роль тем пользователям, которым необходимо работать с ней.

Вариант 2 (менее правильный ИМХО). Создать роль "НоменклатураДобавлениеИзменение". Прописать в модуле справочника в процедуре ПриЗаписи():

Окно ошибки при нарушении прав доступа в 1С

Привилегированный режим работы

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

Включение привилегированного режима осуществляется методом

Если вызвать метод УстановитьПривилегированныйРежим (Ложь) большее количество раз, чем УстановитьПривилегированныйРежим (Истина) , то будет вызвано исключение.

Получить текущее значение привилегированного режима можно функцией

которая возвращает значение типа Булево.

Безопасный режим работы

В безопасном режиме:

  • привилегированный режим отменяется, а попытка перехода в привилегированный режим игнорируется;
  • запрещено использование внешних средств по отношению к 1С (доступ к файловой системе, доступ к интернету, загрузка внешних компонент, механизмы COM).

Включение безопасного режима осуществляется методом

Если вызвать метод УстановитьБезопасныйРежим (Ложь) большее количество раз, чем УстановитьБезопасныйРежим (Истина) , то будет вызвано исключение.

Получить текущее значение безопасного режима можно функцией

которая возвращает значение типа Булево.

Программная работа с Ролями

Для проверки доступности Роли текущему пользователю:

Для определения права доступа (чтение, изменение и т.д.) к объекту метаданных:

Для проверки прав доступа текущего пользователя на объект метаданных:

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

Для получение информации о праве доступа на определенный объект метаданных для пользователя или роли с учетом указанных полей:

Для получения представления права по имени:

Программная работа с Ролями в БСП

В типовых конфигурациях, построенных на Библиотеке стандартных подсистем, в общих модулях есть методы для работы с ролями. Вот некоторые из них:

Пользователи . РолиДоступны ( ИменаРолей , Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина)
Пользователи . ЭтоПолноправныйПользователь ( Пользователь = Неопределено, ПроверятьПраваАдминистрированияСистемы = Ложь, УчитыватьПривилегированныйРежим = Истина)
УправлениеДоступом . ЕстьРоль (Знач Роль , Знач СсылкаНаОбъект = Неопределено, Знач Пользователь = Неопределено)
УправлениеДоступом . ЕстьПраво ( Право , СсылкаНаОбъект , Пользователь = Неопределено)
УправлениеДоступом . ЧтениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ИзменениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ОграничиватьДоступНаУровнеЗаписей ()
УправлениеДоступом . ПраваПоИдентификаторам ( Идентификаторы = Неопределено)

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

Остались вопросы?
Спросите в комментариях к статье.

Список активных пользователей в конфигураторе можно получить через меню Администрирование ⇒ Активные пользователи.

Список активных пользователей в конфигураторе

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

В режиме предприятия

Список активных пользователей в режиме предприятия


Функционал этого окна полностью повторяет рассмотренное окно в режиме конфигуратора.
2. Через специальную обработку библиотеки стандартных подсистем (встроена во все типовые прикладные решения). Обычно она располагается: Администрирование ⇒ Поддержка и обслуживание ⇒ Активные пользователи. Внешний вид обработки в разных конфигурациях может немного отличаться.

В консоли администрирования кластера серверов

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

Список активных пользователей в консоли администрирования

Программно

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

  • ИмяКомпьютера(Строка);
  • ИмяПриложения(Строка);
  • НачалоСоединения(Дата);
  • НомерСеанса(Число);
  • НомерСоединения(Число);
  • Пользователь(ПользовательИнформационнойБазы).

Пример программного получения активных пользователей:

Остались вопросы?
Спросите в комментариях к статье.

Вся информация, представленная в статье, относится только к управляемому приложению.

Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:

Текущие данные 1С

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

    Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда.
  • В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.

Варианты получения свойства Текущие данные 1С

В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.

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

Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.

Читайте также: