Имя: Пароль:
1C
1С v8
Дополнительная аутентификация 1С предприятие ERP УФ
0 Родом из детства
 
16.09.21
12:29
Всем здравствуйте. Задача следующая:
Имеется рабочее место(типо цеха). В нем работает бригада. В бригаде, помимо обычных сотрудников(чьих учеток нет в пользователях), имеется начальник бригады(а его учетка уже имеется). Там стоит один комп, с открытой обработкой. В ней они фиксируют произведенную продукцию. Обработка запускается третьим лицом(то есть есть пользователь, который открывает обработку для всех цехов). В ней есть кнопка, позволяющая менять состав бригады, однако, воспользоваться ей может только начальник бригады(а не какой-нибудь другой струдник). Пользователь хочет, чтобы по нажатию на кнопку появлялось окно аутентификации, куда бы начальник вводил свои данные аутентификации, и, в случае, если они верны, он мог менять состав. При этом, текущий пользователь бы не менялся.
То есть, по сути, мне нужно проверить - имеется ли пользователь с таким именем/паролем в базе. Но не могу понять, где храняться данные. И, может, уже есть что-то стандартное/готовое?
1 ДенисЧ
 
16.09.21
12:35
Справочнки.Пользователи?
Да, вряд ли...
2 Родом из детства
 
16.09.21
12:37
(1) Не нашел там пароля
3 polosov
 
16.09.21
12:53
(0) ЗаблокироватьРаботуПользователя() ?
4 ДенисЧ
 
16.09.21
12:54
(2) В допсвойства запиши.
5 Родом из детства
 
16.09.21
12:54
(3) честно говоря не шарю за эту функцию, но, судя по названию, мужикам из бригады после такого мува придется снова звать человека, который запускает обработку
6 polosov
 
16.09.21
12:57
(5) Тогда ПользователиИнформационнойБазу.ПолучитьПользователей() и далее смотри свои пароли
7 Родом из детства
 
16.09.21
12:59
(6) хм, попробую, спасибо)
8 polosov
 
16.09.21
13:00
(7) И связь со справочником через реквизит ИдентификаторПользователяИБ
9 Родом из детства
 
16.09.21
13:01
(8) ок)
10 Родом из детства
 
16.09.21
13:35
В общем, все вышло немного иначе
11 Родом из детства
 
16.09.21
13:35
&НаКлиенте
Процедура ПроверитьПароль(Команда)
    Результат = ПроверитьТекущийПарольПользователя(Пользователь, Пароль);
    Сообщить(?(Результат,"Норм", "Это ошибка"));
КонецПроцедуры

Функция ПолучитьХешПароля(Пароль) Экспорт
    Хеш = Новый ХешированиеДанных(ХешФункция.SHA1);
    Хеш.Добавить(Пароль);
    Возврат Base64Строка(Хеш.ХешСумма);
КонецФункции

Функция ПроверитьТекущийПарольПользователя(Пользователь, Пароль, РегистроНезависимый=Истина) Экспорт
    
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ);
    
    УстановитьПривилегированныйРежим(Истина);
    ХешТекущегоПароля = ПользовательИБ.СохраняемоеЗначениеПароля;
    УстановитьПривилегированныйРежим(Ложь);
    Если ХешТекущегоПароля = Пароль Тогда Возврат Истина КонецЕсли; // Пароль совпадает с СохраняемоеЗначениеПароля только в случае пустого значения
    ПозицияРазделителя = Найти(ХешТекущегоПароля, ",");
    Результат = Ложь;
    Если РегистроНезависимый Тогда
        Результат = ПолучитьХешПароля(ВРег(Пароль)) = Прав(ХешТекущегоПароля, СтрДлина(ХешТекущегоПароля) - ПозицияРазделителя);
    Иначе
        Результат = ПолучитьХешПароля(Пароль) = Лев(ХешТекущегоПароля, ПозицияРазделителя - 1);
    КонецЕсли;
    Возврат Результат;
    
КонецФункции

Функция ПолучитьСохраняемоеЗначение(Пароль) Экспорт
    Возврат ?(ЗначениеЗаполнено(Пароль),ПолучитьХешПароля(Пароль) + "," + ПолучитьХешПароля(ВРег(Пароль)),"");
КонецФункции
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.