|
Программное добавление пользователей в БП 3.0 | ☑ | ||
---|---|---|---|---|
0
Vladas86
28.03.14
✎
10:55
|
Привет! Перевел бухгалтерию на БП 3.0, обработки переписал, печатные формы перепилил, всё отлично.
Но есть одна штука, которая не дает мне спокойно спать: бухгалтерских баз у меня 10, постоянно нужно назначать права разным людям, вручную это делать ужасно напряжно. В торговле (у нас 10.3) я эту проблему решил синхронизацией пользователей с AD, там никаких проблем нет: просто подключаюсь через webservice и передаю таблицу пользователей и прав. В БП 3.0 все как-то слишком сложно. Уже второй день не могу победить, может кто уже делал что-то подобное? Собственно проблема у меня с заполнением справочника Пользователи. То роли не цепляет, то группу доступа сбросит. |
|||
1
Vladas86
28.03.14
✎
12:20
|
Ап
|
|||
2
Apokalipsec
28.03.14
✎
12:24
|
Готовый код тебе никто не выложит, помочь разобраться с тем, что не цепляет и сбрасывает можем, если покажешь код.
Пятница - телепаты в запое. |
|||
3
Vladas86
28.03.14
✎
12:42
|
Ок.
Функция, которая добавляет пользователя ИБ, работает отлично: // Функция возвращает Истина, если пользователь успешно добавлен в базу, Ложь в противном случае // Владас 21_03_14 13:35:15 // Функция ДобавитьПользователя(ИмяПользователя, ДоменноеИмя, ПользовательАктивен, АутентификацияОС, Авторизация1СПредприятия, МассивРолей) Экспорт // Попробуем найти сотрудника // Владас 21_03_14 14:05:57 Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя); // // Теперь попробум найти сотрудника по пользователю ос // Владас 21_03_14 19:21:27 Если Пользователь = Неопределено Тогда Для Каждого ТекущийПользователь Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл Если ТекущийПользователь.ПользовательОС = ДоменноеИмя Тогда Пользователь = ТекущийПользователь; Прервать; Конецесли; КонецЦикла; КонецЕсли; // // Если мы не нашли сотрудника, то создадим его // Владас 29_08_13 Если Пользователь = Неопределено Тогда Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя(); КонецЕсли; // // Записываем свойства // Владас 21_03_14 13:57:07 Пользователь.АутентификацияОС = АутентификацияОС; Пользователь.АутентификацияСтандартная = Авторизация1СПредприятия; Пользователь.ЗапрещеноИзменятьПароль = Истина; Пользователь.Имя = ИмяПользователя; Пользователь.ПолноеИмя = ИмяПользователя; Пользователь.ПоказыватьВСпискеВыбора = Ложь; Пользователь.ПользовательОС = ДоменноеИмя; // // Сначала очистим все текущие роли // Владас 21_03_14 13:51:20 Пользователь.Роли.Очистить(); // // Теперь найдем переданный массив ролей в справочнике профилей // и добавим все роли указанные в профиле. Все очень сложно, да // Владас 27_03_14 11:43:50 МассивИменРолей = Новый Массив(); Для Каждого Роль Из МассивРолей.Role Цикл МассивИменРолей.Добавить(Роль); КонецЦикла; ТекстЗапроса = "ВЫБРАТЬ | ПрофилиГруппДоступаРоли.Роль.Имя КАК Имя |ИЗ | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли |ГДЕ | ПрофилиГруппДоступаРоли.Ссылка.Наименование В(&МассивИменРолей)"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("МассивИменРолей", МассивИменРолей); Результат = Запрос.Выполнить().Выгрузить(); Для Каждого Роль Из Результат Цикл НайденнаяРоль = Метаданные.Роли.Найти(Роль.Имя); Если НайденнаяРоль <> Неопределено Тогда Пользователь.Роли.Добавить(НайденнаяРоль); КонецЕсли; КонецЦикла; // // Записываем! Пользователь.Записать(); // // Теперь посмотрим нужно ли деактивировать пользователя Если Не ПользовательАктивен Тогда ДективироватьПользователя(Пользователь); КонецЕсли; // // Запишем еще и справочник пользователя // Владас 24_03_14 10:24:40 ЗаполнитьСправочникПользователя(Пользователь); // Возврат Истина; КонецФункции Теперь функция, которая добавляет справочник Пользователь. С ней и проблема: // Процедура заполняет помимо прочего справочник пользователя // Владас 24_03_14 10:13:40 // Процедура ЗаполнитьСправочникПользователя(ПользовательИБ) Экспорт ТекстЗапроса = "ВЫБРАТЬ | ИСТИНА КАК ЕстьПользователь, | Пользователи.Ссылка КАК Пользователь |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ЛОЖЬ, | NULL"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); Результат = Запрос.Выполнить().Выгрузить()[0]; ОписаниеПользователя = Пользователи.НовоеОписаниеПользователяИБ(); Если Результат.ЕстьПользователь Тогда ПользовательОбъект = Результат.Пользователь.ПолучитьОбъект(); Иначе ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); ПользовательОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; ПользовательОбъект.Наименование = ПользовательИБ.Имя; ОписаниеПользователя.Вставить("Действие", "Записать"); ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователя); КонецЕсли; ЗаполнитьЗначенияСвойств(ОписаниеПользователя, ПользовательИБ); Для Каждого Элемент Из ОписаниеПользователя Цикл ПользовательОбъект.ДополнительныеСвойства.Вставить(Элемент.Ключ, Элемент.Значение); КонецЦикла; ПользовательОбъект.ДополнительныеСвойства.Удалить("Роли"); ПользовательОбъект.Записать(); КонецПроцедуры Что не так? |
|||
4
mikecool
28.03.14
✎
12:44
|
(3) а что с ней не так?
|
|||
5
Vladas86
28.03.14
✎
12:54
|
Смотри, я так понимаю в БП 3.0 вместе с обычными ролями 1с проверяются еще и ГруппыДоступа, в которых продублированы роли. Причем при записи справочника Пользователь группа доступа может установиться верно, а может полностью убрать уже установленные роли.
Как это вообще все вместе работает я совершенно не могу разобраться, все очень запутано. Группы доступа ставятся из внешней формы, и опять же по какому-то очень хитрому алгоритму. Вот как-то так. |
|||
6
Apokalipsec
28.03.14
✎
13:07
|
(5) Группа доступа - это профиль, настройка ролей осуществляется через группы доступа. Роли берутся из группы доступа, если сначала дашь роли, потом дашь группу - получишь роли из группы.)
Настрой корректно группы и будет тебе счастье, роли не надо ставить. |
|||
7
Vladas86
28.03.14
✎
13:11
|
(6) Ок, понял.
Не подскажешь, кстати, есть ли в модулях процедуры для добавления пользователя в группу? |
|||
8
Vladas86
31.03.14
✎
16:09
|
Всем спасибо, всё работает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |