Программно добавить роль пользователю 1с

Обновлено: 01.07.2024

Наверняка, уже все знают, что из себя представляет новая система, поэтому предистория вкрадце:


Как было раньше( в обычном приложении):


Есть документ. Есть Роли - ПолныеПрава, ДокументНетДоступа, ДокументТолькоЧтение, ДокументЧтениеИРедактирование. В конфигураторе(аналогичный механизм в реж предприятия) вы выставляете пользователям эти роли и у них появляются соответствующие права доступа на документ. Все просто и скучно и даже зевать хочется.

С введением управляемого приложения разработчики решили усложнить(читается как расширить) настройки прав доступа. Теперь:
Вводная та же. Чтобы дать пользователю какие-то права на документ - сначала вам необходимо создать элемент справочника Профили групп доступа. Это некий агрегирующий(суммирующий значения) объект, который объединяет роли в группы ролей. Теоритически таких профилей можно создать сколько угодно много с различным набором ролей( N*(n-1), где N - количество ролей), но на практике количество профилей определяется количеством должностных обязанностей пользователей в организации и их гораздо меньше, чем ролей.
Создаем профили Бесправный(с ролью ДокументНетДоступа), Аудитор(с ролью ДокументТолькоЧтение), Бухгалтер(с ролью ДокументЧтениеИРедактирование).
Чтобы "привязать" эти профили к пользователям - нужно создать элементы справочника ГруппыДоступа. В типовых они создаются автоматически, когда вы отмечаете галочками профили для пользователя. Этот справочник соединяет профиль и пользователя(или нескольких пользователей).
При записи этого элемента справочника система автоматически добавляет роли (из профиля) в роли пользователя. Поэтому не стоит напрямую редактировать роли в конфигураторе, как раньше - при редактировании прав в Предприятии все роли в конфигураторе будут обновлены на роли из профилей пользователя. Кроме того, будет наблюдаться явное противоречение между набором профилей с ролями и ролями, установленными в конфигураторе.


Как хранятся роли в Профиле групп доступа, спросите вы. Ведь роли - это объекты МД, это не ссылочные типы. Отвечаю - для этого(и не только) разработчики создали служебный справочник ИдентификаторыОбъектовМетаданных, в котором хранится( в иерархии!) имена, синонимы, значения пустых ссылок всех объектов МД. Если вы хотите создать Профиль программно и добавить в него роль, то код примерно будет таким:


Но если мы добавили новую роль в конфигурации, то как она попадет в справочник? Хороший вопрос. У справочника ИдентификаторыОбъектовМетаданных есть метод, позволяющий обновлять его данные. это:


Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ИСТИНА,ЛОЖЬ,ЛОЖЬ);//ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка


Процедуру следует запускать каждый раз, когда вы вносите изменения в метаданные, особенно когда изменяете роли, объекты, связанные с новыми ролями.


Отлично. Роль добавили, идентификаторы обновили.


Но обратная связь не работает - вы в режиме предприятия назначили пользователю профиль( с созданием группы доступа), а роль у пользователя в конфигураторе не добавилась! Что делать?
За синхронизацию ролей/профилей отвечает константа ПараметрыРаботыПользователей. Если роли не обновляются в конфигураторе, следует обновить её значение:


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как известно, основная функция обновлятора - это обновление баз. Но многие, наверное, уже обратили внимание на дополнительную закладку "Скрипты", которая появилась в программе с начала 2016 года.

И если вы владеете навыками написания скриптов (2 варианта - пакетные cmd скрипты и onescript, он же 1C), то сможете на этой закладке творить чудеса, не связанные напрямую с обновлением.

В этой статье рассмотрим как в группе баз:

Для применения материала нужен хотя бы минимальный уровень владения языком 1с и изучение начальной статьи по скриптам в обновляторе.

Для теста возьмём три базы:


Переходим на закладку "Скрипты":


Прежде всего указываем "Базы для запуска" и тип скрипта "OneScript". Нижние параметры запуска ("Блокировать", "Разблокировать. " выставляем как на рисунке).

Осталось только написать скрипт в редакторе и запустить его (через кнопку "Запустить") сразу на всех выбранных базах.

Для этого выбираем из шаблонов пример "Привет, база":


И свой код (см. примеры ниже) пишем в процедуре Главная.

Создать нового пользователя

Напишем скрипт для создания нового пользователя:

Обратите внимание. В новых версиях конфигураций, основанных на БСП уже недостаточно создать пользователя информационной базы. В добавок нужно создать элемент справочника "Пользователи" и установить связь между ними. Если это ваш случай - разберите как работает вот этот пример.

Запустим его на группе базы:

Для проверки откроем список пользователей первой базы в конфигураторе:

Отлично! Такой же пользователь появился и в оставшихся двух базах.

Добавить роль существующему пользователю

Добавим созданному ранее пользователю право на внешнее подключение к базе. За это отвечает роль "ПравоВнешнегоПодключения".

Скрипт будет таким:

Запустим его на группе баз:

И проверим на первой базе добавилась ли нужная нам роль:

Удалить роль у существующего пользователя

Ну и для учебных целей тут же отберём данную роль у пользователя

Удалить существующего пользователя

Наконец, удалим созданного нами пользователя.

Проверим список пользователей в конфигураторе первой базы:

Вот так легко и просто (при минимальном владении языком 1с) можно управлять списком пользователей сразу в группе баз.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.


Пользователи

Откроется окно со списком всех пользователей информационной базы:

Пользователи

Для добавления нового пользователя нужно нажать на зеленую кнопку с плюсом. Будет открыто окно редактирования нового пользователя:

Пользователи

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

В поле Полное имя нужно ввести полное имя пользователя. Оно будет отображаться в программе, например: Иванов Иван Иванович.

Для аутентификации средствами платформы 1С нужно чтобы был установлен флаг Аутентификация 1С:Предприятия. В этом случае при входе нужно будет ввести логин и пароль.

В полях Пароль и Подтверждение пароля нужно указать пароль пользователя.

Заполним данные пользователя:

Пользователи

Пользователи

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

Роли и права доступа мы рассмотрим позднее, пока просто создадим одну роль Полные права, указав для нее максимально возможные права доступа.

ПолныеПрава

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

ПолныеПрава

Установить все права

И сохраним конфигурацию базы данных.

Вернемся к настройке пользователя и на закладке Прочее установим флаг рядом с ролью Полные права в списке доступных ролей и нажмем ОК:

Доступные роли

И добавим еще одного пользователя:

Пользователь

Теперь при входе в базу нужно выбрать пользователя и ввести его пароль:

Пользователь

Идентификация пользователя не выполнена

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

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

Удалить пользователя

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

Показывать в списке выбора

В настройках пользователя есть флаг Показывать в списке выбора:

Показывать в списке выбора

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

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

Показывать в списке выбора

Теперь при входе в базу пользователь не будет в списке доступных пользователей:

Показывать в списке выбора

Но можно вручную ввести его логин и пароль и войти под ним:

Показывать в списке выбора

Защита от опасных действий

Потенциально опасными действиями считаются:

  • Загрузка внешней обработки или отчета
  • Подключение расширения
  • Обновление конфигурации
  • Выполнение команды операционной системы из внешней обработки/отчета или расширения
  • Программное добавление или удаление пользователей из внешней обработки/отчета или расширения
  • Загрузка внешней компоненты из внешней обработки/отчета или расширения
  • Использование COM-объекта из внешней обработки/отчета или расширения

Если в свойствах пользователя установлен флаг Защита от опасных действий:

Защита от опасных действий

предупреждение безопасности

Если нажать Нет, то внешняя обработка не будет открыта.

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

Активные пользователи

Активные пользователи

Будет открыт список активных пользователей:

Активные пользователи

Текущий пользователь выделен специальной пиктограммой с галочкой.

Параметры

В открывшемся окне нужно установить флажок Режим технического специалиста:

Режим технического специалиста

После этого в главном меню выбрать Функции для технического специалиста:

Функции для технического специалиста

В открывшемся окне в узле Стандартные нужно найти пункт меню Активные пользователи:

Активные пользователи

По двойному клику будет открыто окно с активными пользователями. Текущий пользователь будет выделен жирным шрифтом:

Активные пользователи

Активные пользователи
Активные пользователи

Если база клиент-серверная, то можно запустить утилиту для администрирования серверов 1С предприятие. Для этого в меню пуск нужно найти соответствующий пункт меню:

администрирование серверов 1С

В открывшемся окне нужно в списке информационных баз найти нужную базу, развернуть ее и выбрать пункт Сеансы:

Сеансы

Справа будут показаны все активные сеансы с текущей базой:

Сеансы

Если нужно просто узнать текущего пользователя, то он отображается в правом верхнем углу:

Текущий пользователь

Завершение работы пользователей

Чтобы завершить работу пользователей в 1С можно воспользоваться утилитой для администрирования серверов. Данный вариант подойдет только для клиент-серверных баз. В списке сеансов нужно выделить нужного пользователя и выбрать команду Удалить:

Завершение работы пользователей

Чтобы выгнать всех пользователей из базы нужно нажать ctrl+A, чтобы выделить всех пользователей. А потом выбрать в контекстном меню команду Удалить.

В конфигурациях на базе БСП, в списке активных пользователей есть кнопка Завершить сеанс, которая позволяет завершить сеанс пользователя:

Завершить сеанс

Чтобы выкинуть всех пользователей из файловой базы можно завершить их процессы операционной системы. Этот вариант подойдет если все пользователи работают на одном компьютере. Нужно запустить диспетчер задач (ctrl + alt + Del), на закладке Процессы найти все процессы 1С и завершить их, выбрав в контекстном меню Снять задачу:

Снять задачу

Программная работа с пользователями

Создать нового пользователя

Управление пользователями информационной базы выполняется с помощью объекта ПользователиИнформационнойБазы.

Для добавления нового пользователя нужно вызвать метод СоздатьПользователя у данного объекта. Затем заполнить все необходимые поля и записать пользователя в базу методом Записать:

НовыйПольз = ПользователиИнформационнойБазы . СоздатьПользователя ( ) ; ЗащитаОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий ; ЗащитаОтОпасныхДействий . ПредупреждатьОбОпасныхДействиях = Истина; НовыйПольз . ЗащитаОтОпасныхДействий = ЗащитаОтОпасныхДействий ; НовыйПольз . Роли . Добавить ( Метаданные . Роли . ПолныеПрава ) ;

В результате будет добавлен новый пользователь:

пользователь

Получить всех пользователей

Всех пользователей можно получить с помощью метода ПолучитьПользователей. Данный метод вернет массив объектов типа ПользовательИнформационнойБазы:

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

Поиск пользователей

Найти пользователя можно или по имени или по идентификатору. Для поиска используются методы НайтиПоИмени и НайтиПоУникальномуИдентификатору:

НайдПольз = ПользователиИнформационнойБазы . НайтиПоИмени ( "Сидоров С.С." ) ; УИДПользователя = Новый УникальныйИдентификатор ( "0c3c8e07-c36a-41ce-977a-85ee65d03a00" ) ; НайдПольз = ПользователиИнформационнойБазы . НайтиПоУникальномуИдентификатору ( УИДПользователя ) ;

Удаление пользователя

Для удаления пользователя используется метод Удалить:

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

Текущий пользователь

Чтобы программно получить текущего пользователя можно воспользоваться методом ТекущийПользователь:

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

Блокировка установки сеансов

Клиент-серверный вариант

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

Свойства

В поле с администратором информационной базы нужно ввести логин и пароль пользователя 1С:

администратор информационной базы

Блокировка начала сеансов включена

Начало сеанса с информационной базой запрещено

Блокируются как пользовательские сеансы, так и конфигуратор. При этом, существующие сеансы смогут продолжить работать.

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

Код разрешения

Данный код указывается в свойствах базы в параметре Дополнительные параметры запуска после ключа /UC. Чтобы открыть свойства базы нужно в списке баз выделить нужную базу и нажать кнопку Изменить:

Дополнительные параметры запуска

Теперь в данную базу можно войти даже во время блокировки.

Чтобы снять блокировку до ее окончания нужно просто снять флаг Блокировка начала сеансов включена.

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