Массовое изменение прав (не БСП)

Внешняя обработка для массового изменения прав пользователей. Не требует БСП.

Есть насквозь нетиповая конфигурация (на 8.2). Потребовалось массово изменить набор прав для пользователей — у всех отобрать все роли и добавить одну. Для 300+ пользователей менять это в конфигураторе — слишком долго. И есть риск, что-то пропустить. Поэтому потребовался какой-то инструмент.

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

Как оказалось, все просто. Решается через св-во глобального контекста ПользователиИнформационнойБазы. Главное, после редактирования прав, не забыть выполнить метод Записать() для элемента типа ПользовательИнформационнойБазы.

Выкладываю свой велосипедик (на ОФ). Вдруг кому еще пригодится.

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

И еще. Нюансик реализации. В список пользователей, кому могут быть изменены наборы ролей, НЕ выходят товарищи с ролью Администратор. Чтобы случайно не лишиться всех админов. Такие пользователи выводятся в служебное окно сообщений при запуске обработки.

6 Comments

  1. Ashwood

    На 8.3.11.2867 не работает. Выдает ошибку:

    Ошибка инициализации модуля: ВнешняяОбработка.МассовоеРедактированиеПрав.МодульОбъекта
    по причине:
    {ВнешняяОбработка.МассовоеРедактированиеПрав.МодульОбъекта(19)}: Ошибка при вызове метода контекста (Содержит)
    
    по причине:
    Несоответствие типов (параметр номер ‘1’)
    Reply
  2. ImHunter

    (1) Возможно, обработка запущена под пользователем без админских прав.

    Либо в конфигурации нет роли Администратор.

    Что из этого — ваш случай?

    Reply
  3. Ashwood

    Запущено было под полными правами, отдельно роли Администратор нет.

    Reply
  4. ImHunter

    (3) Ну ясно теперь. Допилю, как найду время.

    Reply
  5. ImHunter

    (3) Выложил обновление. А можно сделать и самостоятельно. Нужно заменить код процедуры модуля объекта ЗаполнитьПользователей(…) на вот этот:

    Процедура ЗаполнитьПользователей(ЗначениеФлажкаИспользовать = Истина)
    
    РольАдминистратор = РольПоИмени(«Администратор»);
    
    ВсеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Для Каждого ТекПользователь Из ВсеПользователи Цикл
    ЭтоАдминистратор = РольАдминистратор<>Неопределено И ТекПользователь.Роли.Содержит(РольАдминистратор);
    Если ЭтоАдминистратор Тогда
    Сообщить(«Пользователь с админскими правами: » + ТекПользователь);
    Продолжить;
    КонецЕсли;
    НовСтрока = ЭтотОбъект.СписокПользователей.Добавить();
    НовСтрока.Использовать = ЗначениеФлажкаИспользовать;
    НовСтрока.ИмяПользователя = ТекПользователь.Имя;
    НовСтрока.ПредставлениеПользователя = ТекПользователь.ПолноеИмя;
    НовСтрока.УИД = Строка(ТекПользователь.УникальныйИдентификатор);
    КонецЦикла;
    
    КонецПроцедуры

    Показать

    Работу измененной обработки не тестировал. Но вроде все и так очевидно.

    Reply
  6. OKE

    Спасибо, очень помогла.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *