gifts2017

Проверка повторного входа

Опубликовал iodine (iodine) в раздел Администрирование - Защита, права, пароли

Внешняя обработка для недопущения повторного входа пользователя.

Не секрет, что в БП и ЗУП отсутствует механизм недопущения повторного входа в программу одного и того же пользователя.

Существующие рекомендации в интернете предлагают вносить изменения в общий модуль, но это не наш путь. Гораздо проще, в плане обновлений, сделать это внешней обработкой.

Однако, изменения в конфигурацию всё же придётся внести - для пользователей без административных прав предлагается добавить новую роль "ПроверкаПовторногоВхода" в которой нужно установить разрешения Активные пользователи и т.д. (см. картинку).

Эти изменения нужно внести для всех информационных баз на сервере, т.к. обработка будет запускаться для всех них.

После этого нужно изменить ярлык запуска программы. Необходимо дописать в конец строки "Объект"

/Execute"C:\ПутьКОбработке\ПроверкаПовторногоВхода83.epf"

Должно получится примерно следующее:

"C:\Program Files (x86)\1cv8\common\1cestart.exe" /Execute"C:\Users\ПроверкаПовторногоВхода83.epf"

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

 

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

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


Обработка работает и под обычные формы и под управляемые, что удобно, когда например на одном сервере БП 3 и ЗУП 2.5.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ПроверкаПовторногоВхода83
.epf 8,78Kb
24.06.14
0
.epf 8,78Kb 0 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Артем Целовальников (slazzy) 24.06.14 21:57
Решение с запуском внешней обработки очень ненадежно во всех смыслах :) лучше всё таки так не делать. К тому же код обработки, я полагаю не сложен, и его вполне можно внести в дополнительный новый модуль.
2. Александр Капустин (kapustinag) 24.06.14 22:44
Кроме того, если "...автоматически завершится, к сожалению, без предупреждения..." - если предупреждение действительно хочется сделать, то непонятно, почему бы его не сделать - в обработчике При Открытии формы. Во всяком случае, в толстом клиенте это 100% работает.

А с (1) полностью согласен. И конфигурацию пришлось менять, и внешнюю обработку задействовать, и ярлык после обновления заменять... Как-то неуклюже.
3. iodine (iodine) 26.06.14 12:37
(1) slazzy, ненадежно? Однако ж уже работает более полугода.
4. iodine (iodine) 26.06.14 12:43
(2) kapustinag, если поставить предупреждение, то оно будет висеть, пока пользователь его не закроет, а пока программа запущена - 1 лицензия занята. Может быть можно сделать как-то так, чтобы программа закрывалась, а сообщение оставалось на экране. Или фокус уходил на уже запущенный вариант. Как это сделать я не знаю, поэтому без предупреждений.
По поводу изменений, это минимальные изменения. Добавить новую роль, это не лезть в общие модули, да даже если в них и лезть, то всё равно придётся добавлять роль. У меня в любом случае есть несколько действий после обновления платформы, так что ещё одно по замене ярлыка, которое занимает секунды погоды не делает.
Впрочем, у каждого своё видение как сделать проще - у меня такое.
К тому же есть на сервере несколько баз, то в какую-то можно забыть добавить такую проверку и она работать не будет, а это решение сразу для всех баз. Забыли доавить роль - будет выскакивать сообщение.
5. Артем Целовальников (slazzy) 26.06.14 13:55
(3) iodine, да. Во-первых с точки зрения безопасности, нету никакой гарантии того, что какой-нибудь нехороший человек не положит по адресу C:\Users\ПроверкаПовторногоВхода83.epf другую обработку, которая скажем возьмет все ваши данные и отошлет ему на почту, или просто удалит. Да и вообще вы даете пользователям право запускать внешние обработки, что может быть чревато.
Во-вторых нету никакой гарантии, что случайно не удалится эта обработка, а уж тем более с диска C. В-третьих, как и сказал (2) вы всё равно изменили конфигурацию. Я не знаю какой код в Вашей обработке, я не качал. Но лично я тренировки ради сделал подобное решение примерно в 10 строках кода, без добавления лишних объектов. Сделал за пару минут, вероятно это далеко не самое оптимальное решение, но оно работает.
ЗЫ В тонком клиенте пришлось бы вызывать сервер. Либо изменять 2 модуля, например в модуле сеанса проверять возможность запуска и передавать результат через ПараметрыСеанса, а в модуле управляемого приложения уже проверять значение этого параметра сеанса.

	
Процедура ПередНачаломРаботыСистемы(Отказ)
////////
//стандартный код
//////
МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
	НомерСеанса = НомерСеансаИнформационнойБазы();
	Для Каждого Соединение из МассивСоединений Цикл
		
		Если Соединение.НомерСеанса = НомерСеанса Тогда
			Продолжить;
		КонецЕсли;
		
		Если Соединение.Пользователь.УникальныйИдентификатор = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор  
			И Соединение.ИмяПриложения = "1CV8" Тогда
			Отказ = Истина;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
...Показать Скрыть


Если вам так дорога эта обработка, встройте вы её в конфигурацию и вызывайте в модуле управляемого приложения через серверный вызов.
6. iodine (iodine) 30.06.14 10:54
(5) slazzy, спасибо, что тратите ваше время, на обсуждение этой обработки. Постараюсь ответить на ваши замечания.
По поводу безопасности - это всё решается на уровне разграничения прав доступа к файлам. Если у вас нет административного доступа к серверу или этот доступ есть у кого-то ещё, особенно у "нехороших" людей, то этот способ, конечно, не подходит. Тоже самое касается удаления файла. К тому же, если файл обработки вдруг исчезнет, все пользователи будут получать сообщение об ошибке при запуске программы. Некоторые даже скажут программисту об этом ;)
Что касается предоставления пользователям права запуска внешних обработок, то да, это не всегда подходит, но дырой в безопасности я бы тоже это не назвал. Конечно, злоумышленник может с помощью этого что-то сделать с базой, например, массово удалить данные справочников, но это уже очень близко к паранойе, если честно :)
Как я понял, вы предлагаете вносить изменения в модуль обычного и в 2 модуля управляемого приложения (в зависимости от конфигурации). А это ведёт к постоянному контролю изменений в этих модулях при обновлении конфигурации. И это нужно будет сделать для каждой конфигурации на сервере, а если их, например, десяток-другой. Во сколько раз увеличивается время на установку обновлений?
В моём же способе всего лишь добавляется новая роль, которую, кстати, придётся создавать и в вашем варианте, т.к. права получения списка соединений у пользователя тоже нет. При этом контролировать что-то в процессе обновления конфигурации не нужно.
Подводя итог, хочу сказать, что если вы приходящий программист, а есть ещё администратор сервера, то мой способ - не самое лучшее решение. В случае возникновения проблем сложно будет найти и доказать чья вина. К тому же, при почасовой оплате выгоднее подольше обновлять конфигурацию каждый раз.
Ну, а если сервер полностью в вашей власти и вам нужно как можно меньше времени тратить на обновление конфигураций, то мой способ вполне подойдёт. Ещё раз повторю, этот вариант рабочий и используется уже больше полугода.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа