Контроль записи/проведения документов в заданном интервале дней

17.11.15

Администрирование - Информационная безопасность

Данное решение позволяет гибко настраивать правила записи и проведения документов для пользователей, групп пользователей.

Скачать исходный код

Наименование Файл Версия Размер
Конфигурация с объектами
.cf 23,31Kb
3
.cf 23,31Kb 3 Скачать

Решение не претендует на оригинальность, но, возможно, поможет кому-нибудь.

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

Настройка правил

Кроме регистра добавлена подписка на событие записи документа.

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

 

Функция ПроверитьВозможностьЗаписиДокумента(СсылкаДок, Пользователь, РежимЗаписи)
	КолДней = Неопределено;
	
	//проверим есть ли в регистре правила контроля по данному документу для переданного
	//пользователя, либо группы в которую он входит
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПравилаКонтроляДокументов.КолДнейПроведение КАК КолДнейПроведение,
	|	ПравилаКонтроляДокументов.КолДнейЗапись КАК КолДнейЗапись
	|ИЗ
	|	РегистрСведений.ПравилаКонтроляДокументов КАК ПравилаКонтроляДокументов
	|ГДЕ
	|	ПравилаКонтроляДокументов.Пользователь = &Пользователь
	|	И ТИПЗНАЧЕНИЯ(ПравилаКонтроляДокументов.Документ) = ТИПЗНАЧЕНИЯ(&Документ)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ГруппыДоступа.Ссылка КАК ГруппаДоступа,
	|	ПравилаКонтроля.КолДнейПроведение КАК КолДнейПроведение,
	|	ПравилаКонтроля.КолДнейЗапись КАК КолДнейЗапись
	|ИЗ
	|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступа
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПравилаКонтроляДокументов КАК ПравилаКонтроля
	|		ПО (ПравилаКонтроля.Пользователь = ГруппыДоступа.Ссылка)
	|ГДЕ
	|	ГруппыДоступа.Пользователь = &Пользователь
	|	И ТИПЗНАЧЕНИЯ(ПравилаКонтроля.Документ) = ТИПЗНАЧЕНИЯ(&Документ)
	|";
	
	Запрос.УстановитьПараметр("Документ", СсылкаДок.Ссылка);
	Запрос.УстановитьПараметр("Пользователь", Пользователь);
		
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	//сначала проверим есть ли правило для пользователя
	Выборка = РезультатЗапроса[0].Выбрать();
	Если Выборка.Следующий() Тогда
		КолДней = ?(РежимЗаписи = РежимЗаписиДокумента.Запись, Выборка.КолДнейЗапись, Выборка.КолДнейПроведение);
	КонецЕсли; 
	
	//для пользователя правил нету, возможно есть правило для групп в которых находится пользователь
	Если КолДней = Неопределено Тогда
		ПравилаПоГруппам = РезультатЗапроса[1].Выгрузить();
		Если ПравилаПоГруппам.Количество() Тогда
			КолДнейПроведение = Неопределено;
			КолДнейЗапись = Неопределено;
			//выбираем наименьшее количество дней из выбранных правил
			Для каждого ТекПравило Из ПравилаПоГруппам Цикл
				КолДнейПроведение = ?((КолДнейПроведение = Неопределено) 
					ИЛИ (ТекПравило.КолДнейПроведение < КолДнейПроведение И ТекПравило.КолДнейПроведение <> -1), 
					ТекПравило.КолДнейПроведение, КолДнейПроведение);
				КолДнейЗапись = ?((КолДнейЗапись = Неопределено) 
					ИЛИ (ТекПравило.КолДнейЗапись < КолДнейЗапись И ТекПравило.КолДнейЗапись <> -1), 
					ТекПравило.КолДнейЗапись, КолДнейЗапись);	
			КонецЦикла; 
			
			КолДней = ?(РежимЗаписи = РежимЗаписиДокумента.Запись, КолДнейЗапись, КолДнейПроведение);
		КонецЕсли; 
	КонецЕсли; 
	
	Если КолДней <> Неопределено И КолДней <> -1 Тогда 
		//ищем разницу в днях между текущей датой и датой документа, 
		//проверяем чтобы она не превышала заданое в правилах количество
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|   РАЗНОСТЬДАТ(&ДатаДокумента, &ТекущаяДата, ДЕНЬ) КАК РазностьДат
		|";
		
		Запрос.УстановитьПараметр("ДатаДокумента", СсылкаДок.Дата);
		Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
		
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			Если Выборка.РазностьДат > КолДней Тогда
				Возврат Ложь;
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли; 
	
	//по данному документу для пользователя не заданно явных правил, контроль пройден
	Возврат Истина;
КонецФункции

Процедура ПодпискаНаСобытиеЗаписиДокументаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
	//Проверяем есть ли заданное количество дней для данного документа
	КонтрольПройден = ПроверитьВозможностьЗаписиДокумента(Источник, ПараметрыСеанса.ТекущийПользователь, РежимЗаписи);
	Если НЕ КонтрольПройден Тогда
		Отказ = Истина;
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Согласно правилам контроля документов, вам отказано в "
			+ ?(РежимЗаписи = РежимЗаписиДокумента.Запись, "записи",
				?(РежимЗаписи = РежимЗаписиДокумента.Проведение, "проведении", "отмене проведения")) 
			+ " документа! Обратитесь к системному администратору!";
		Сообщение.Сообщить();
	КонецЕсли; 
КонецПроцедуры


Данное решение в минимальное объеме использует функционал типовых решений 1С. Достаточно просто встраивается в типовые решения, для самописных придется немного поработать напильником. Для этого вам потребуется перенести в свою конфигурацию: регистр сведений "ПравилаКонтроляДокументов", общий модуль "МодульКонтроляДокументов" и подписку на событие "ПодпискаНаСобытиеЗаписиДокумента". Используются управляемые формы.

Решение прошло обкатку на УТ 11.

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

См. также

AUTO VPN (portable)

Информационная безопасность Платные (руб)

Автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    14467    22    32    

33

Настройка аутентификации в 1С с использованием стандарта RFC 7519 (JWT)

Информационная безопасность Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    3067    PROSTO-1C    9    

32

Device flow аутентификация, или туда и обратно

Информационная безопасность Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    1703    platonov.e    1    

23

Анализатор безопасности базы сервера 1С

Информационная безопасность Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Продукты на основе решений 1С уверенной поступью захватывают рынок учётных систем в стране. Широкое распространение программ всегда порождает большой интерес к ним со стороны злоумышленников, а пользователь 1С это одна из дверей в защищённый информационный контур предприятия. Обработка позволяет быстро и комплексно оценить настройки безопасности конкретной базы и возможности пользователя этой базы на сервере. Также можно оценить некоторые аспекты сетевой безопасности предприятия со стороны сервера 1С.

5 стартмани

24.04.2023    5546    17    soulner    7    

29

Двухфакторная аутентификация в 1С через Telegram и Email

Информационная безопасность Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    6083    33    Silenser    12    

23

История одного взлома или проверьте вашу систему на безопасность

Информационная безопасность Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

От клиента клиенту, от одной системы к другой, мы вновь и вновь встречаем одни и те же проблемы и дыры в безопасности. На конференции Infostart Event 2021 Post-Apocalypse Виталий Онянов рассказал о базовых принципах безопасности информационных систем и представил чек-лист, с помощью которого вы сможете проверить свою систему на уязвимость.

26.10.2022    9396    Tavalik    46    

113
Оставьте свое сообщение