1с проверить роль текущего пользователя
Обновлено: 19.07.2024
(2) РольДоступна() - проверяет доступность роли для текущего пользователя
Если же надо проверить для другого пользователя, точнее для ссылки на справочник Пользователи то обычно в типовых у этого справочника есть реквизит ИдентификаторПользователяИБ (это в УТ11) либо по по коду/имени надо найти Пользователя ИБ - обратиться к коллекции ролей
ПользователиИнформационнойБазы.НайтиПоИмени(<Имя>).Роли
НайтиПоУникальномуИдентификатору(<Идентификатор>).Роли.Содержит(Метаданные.Роли.ПолныеПрава)
Спасибо! Но теперь у меня возникла другая задача : каждый пользователь имеет полные права.Я создаю роль,кто. изменяет справочник "Номенклатура". Мне нужно после проверки на роль "Изменение номеклатуры" при ее отсутствии запретить изменять номенклатуру.
Т.е
Если РольДоступна("ИзменениеНоменклатуры") Тогда
.
Иначе
запрет изменения номенклатуры
КонецЕсли;
Вариант 1. Вам придется либо "уйти" от полных прав, создать индивидуальные роли для каждой группы пользователей, у всех созданных ролей убрать доступ к справочнику Номенклатура. Создать роль например "НоменклатураДобавлениеИзменение", у которой будет соответствующий доступ к справочнику Номенклатура, и назначить эту роль тем пользователям, которым необходимо работать с ней.
Вариант 2 (менее правильный ИМХО). Создать роль "НоменклатураДобавлениеИзменение". Прописать в модуле справочника в процедуре ПриЗаписи():
Привилегированный режим работы
В системе есть возможность временно отключить проверку прав доступа. Такой режим называется привилегированным. В привилегированном режиме разрешены любые операции с базой и не производится контроль RLS.
Включение привилегированного режима осуществляется методом
Если вызвать метод УстановитьПривилегированныйРежим (Ложь) большее количество раз, чем УстановитьПривилегированныйРежим (Истина) , то будет вызвано исключение.
Получить текущее значение привилегированного режима можно функцией
которая возвращает значение типа Булево.
Безопасный режим работы
В безопасном режиме:
- привилегированный режим отменяется, а попытка перехода в привилегированный режим игнорируется;
- запрещено использование внешних средств по отношению к 1С (доступ к файловой системе, доступ к интернету, загрузка внешних компонент, механизмы COM).
Включение безопасного режима осуществляется методом
Если вызвать метод УстановитьБезопасныйРежим (Ложь) большее количество раз, чем УстановитьБезопасныйРежим (Истина) , то будет вызвано исключение.
Получить текущее значение безопасного режима можно функцией
которая возвращает значение типа Булево.
Программная работа с Ролями
Для проверки доступности Роли текущему пользователю:
Для определения права доступа (чтение, изменение и т.д.) к объекту метаданных:
Для проверки прав доступа текущего пользователя на объект метаданных:
Процедура ВыполнитьПроверкуПравДоступа () отличается от функции ПравоДоступа () тем, что доступна только для текущего пользователя. При отсутствии права вызывается исключение, а в журнал регистрации пишется событие ОтказВДоступе.
Для получение информации о праве доступа на определенный объект метаданных для пользователя или роли с учетом указанных полей:
Для получения представления права по имени:
Программная работа с Ролями в БСП
В типовых конфигурациях, построенных на Библиотеке стандартных подсистем, в общих модулях есть методы для работы с ролями. Вот некоторые из них:
Пользователи . РолиДоступны ( ИменаРолей , Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина)
Пользователи . ЭтоПолноправныйПользователь ( Пользователь = Неопределено, ПроверятьПраваАдминистрированияСистемы = Ложь, УчитыватьПривилегированныйРежим = Истина)
УправлениеДоступом . ЕстьРоль (Знач Роль , Знач СсылкаНаОбъект = Неопределено, Знач Пользователь = Неопределено)
УправлениеДоступом . ЕстьПраво ( Право , СсылкаНаОбъект , Пользователь = Неопределено)
УправлениеДоступом . ЧтениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ИзменениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ОграничиватьДоступНаУровнеЗаписей ()
УправлениеДоступом . ПраваПоИдентификаторам ( Идентификаторы = Неопределено)
В общих модулях у каждого метода есть подробное описание. Там можно посмотреть описание самого метода, входных параметров и возвращаемого значения.
Остались вопросы?
Спросите в комментариях к статье.
Список активных пользователей в конфигураторе можно получить через меню Администрирование ⇒ Активные пользователи.
В окне отображается имя пользователя, режим запуска, время начала работы, имя компьютера и номер сеанса. Из этого окна можно открыть журнал регистрации действий интересующего пользователя.
В режиме предприятия
Функционал этого окна полностью повторяет рассмотренное окно в режиме конфигуратора.
2. Через специальную обработку библиотеки стандартных подсистем (встроена во все типовые прикладные решения). Обычно она располагается: Администрирование ⇒ Поддержка и обслуживание ⇒ Активные пользователи. Внешний вид обработки в разных конфигурациях может немного отличаться.
В консоли администрирования кластера серверов
Наиболее полную информацию по сеансам 1С (а значит и по активным пользователям) можно получить в консоли администрирования кластера серверов. Данный способ подходит только для серверных баз.
Программно
Можно воспользоваться методом глобального контекста ПолучитьСоединенияИнформационнойБазы () . Функция доступна на сервере, не имеет входных параметров, а возвращает массив значений типа СоединениеИнформационнойБазы .
Значение типа СоединениеИнформационнойБазы имеет свойства:
- ИмяКомпьютера(Строка);
- ИмяПриложения(Строка);
- НачалоСоединения(Дата);
- НомерСеанса(Число);
- НомерСоединения(Число);
- Пользователь(ПользовательИнформационнойБазы).
Пример программного получения активных пользователей:
Остались вопросы?
Спросите в комментариях к статье.
Вся информация, представленная в статье, относится только к управляемому приложению.
Так как свойство относится к элементу формы (таблице), данные получаются именно из него, а не из источника. Из этого следует несколько особенностей свойства ТекущиеДанные:
- Доступно только на клиенте. Его нельзя передавать и использовать на сервере. Поэтому правильно будет получить значения нужных полей в клиентской процедуре и передать их в серверную, при необходимости.
- Содержит данные реквизитов добавленных на форму, а также данные реквизитов с установленным флагом Использовать всегда. Остальные реквизиты отсутствуют в коллекции.
Как видно на картинке, в текущих данных представлены реквизиты Номенклатура и Сумма, добавленные в таблицу и реквизит Количество с установленным флагом Использовать всегда. - В случае, если таблица формы пустая или у нее нет активизированной строки, свойство ТекущиеДанные будет содержать значение Неопределено. Поэтому, перед использованием свойства, имеет смысл делать проверку. Но только в тех случаях, когда таблица действительно может быть пустой или не активизированной. Например событие ПриАктивизацииСтроки вызывается и для пустой таблицы. А вот событие ПриИзменении колонки таблицы, может вызываться только при наличии активизированной строки. Поэтому в проверке не будет смысла.
Варианты получения свойства Текущие данные 1С
В общем случае к свойству ТекущиеДанные можно обратиться через элемент формы к которому оно относится.
Но при обращении к текущим данным из обработчика события таблицы формы, можно воспользоваться параметром Элемент. В нем уже содержится таблица формы. В этом случае обращение к текущим данным будет выглядеть следующим образом:
Такое обращение к текущим данным не получится реализовать в обработчиках событий колонок таблицы формы. Так как в параметр Элемент там передается ПолеФормы, относящееся к колонке.
Читайте также: