1001-й способ ограничить пользователей 1С

13.07.17

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

Описан еще один способ ограничить пользователя 1С, при помощи подписки на события

Задача: разрешить пользователям проводить документы только внутри разрешенных им складов.

Частично данная задача успешно решается при помощи RLS и соответствующих ролей. Но! не полностью. Во всяком случае в конфигурации 1С Розница 2.2 нет возможности ограничить пользователя (без изменения конфигураци)... ну, например, реализовывать  товар с "чужого" склада/Магазина, делать перемещение товаров на "чужие" склады (ограничения работают только для Ордеров???). 

Решение: используем относительно новую фичу от 1С - подписка на события. А именно на событие "Запись". Данные, по которым будем проверять, можно пользователю записывать данный документ или нет, будем брать из специально созданного справочника.

В котором перечислена группа, к которой принадлежит пользователь, вид документа, по которому его ограничиваем, и список складов, с которыми ему позволено это документ использовать. Далее создадим подписку на событие:

И собственно саму обработку события

Функция ПолучитьГруппуПользователя()
 Запрос = Новый Запрос;
  	 Запрос.Текст = "ВЫБРАТЬ
  	                |	ГруппыПользователей.Наименование КАК Наименование
  	                |ИЗ
  	                |	Справочник.ГруппыПользователей КАК ГруппыПользователей
  	                |ГДЕ
  	                |	ГруппыПользователей.Состав.Пользователь.Ссылка = &Ссылка";
	 
	Запрос.УстановитьПараметр("Ссылка",  ПараметрыСеанса.ТекущийПользователь);
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	группа="";
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		группа=ВыборкаДетальныеЗаписи.Наименование;
	конеццикла;	           
	возврат группа;
	
КонецФункции	

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

P.S. Это не "готовое решение", а пример как можно сделать. Есть и другие способы.

подписка на србытия ограничение прав

См. также

AUTO VPN (portable)

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

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

1200 руб.

24.03.2020    14395    22    32    

33

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

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

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

27.02.2024    2592    PROSTO-1C    9    

29

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

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

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

1 стартмани

27.10.2023    1616    platonov.e    1    

23

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

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

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

5 стартмани

24.04.2023    5437    14    soulner    7    

29

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

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

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

2 стартмани

08.12.2022    5965    32    Silenser    12    

23

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

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

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

26.10.2022    9242    Tavalik    46    

113
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Altair777 644 13.07.17 16:49 Сейчас в теме
(0)
решается при помощи RLE

чего-чего?

используем относительно новую фичу от 1С - подписка на события

насколько новую? :)

ДополнительныеНастройкиПравГрибовСкладыОткуда.Ссылка.ГруппаПользователей.Наименование = &ИмяГруппы

почему наименование, а не сама группа?
klinval; DrAku1a; JohnConnor; ResetAtreides; kote; chebser; Артано; sergpogo; TODD22; Andreeei; manlak; dnikolaev; eskor; +13 Ответить
2. Сурикат 393 13.07.17 17:41 Сейчас в теме
Можно было бы сделать все одним запросом...
А если групп будет несколько?

Склад.Ссылка Т___Т Не надо так...

А если до этого сработали типовые проверки и Отказ = Истина, а вы его так смело Отказ = Ложь...

И все можно было сделать в запросе...
Dmitri93; +1 Ответить
3. Wolfis 7 13.07.17 17:56 Сейчас в теме
Решение: используем относительно новую фичу от 1С - подписка на события.


эммммммм...я ее еще в году так 2011 использовал ...то есть минимум 6 лет это относительно новое??
4. kiruha 388 13.07.17 19:00 Сейчас в теме
А что за грибы ?
klinval; DrAku1a; Stim213; Dmitri93; rybolovlev_ms; ResetAtreides; demkonst; karpik666; Andreeei; manlak; androgin; +11 Ответить
7. Altair777 644 14.07.17 09:30 Сейчас в теме
(4) см. фамилию автора
Ну, хочется человеку оставить свой след :)

а вообще, за такой код
если естьправила=Ложь тогда

хочется по рукам надавать. Вот как надо:
Если Не ЕстьПравила Тогда

найди 3 отличия!
Артано; lunjio; +2 1 Ответить
9. TODD22 18 14.07.17 09:46 Сейчас в теме
(7)
Вот как надо:

Только при условии что в переменной будет тип булево. Если там будет какой то другой тип то будет ошибка.

Вариант "Если ЕстьПравила = Ложь Тогда" будет более устойчивым к ошибкам.
GetNight; sashs1980; Award; Aletar; +4 2 Ответить
10. Altair777 644 14.07.17 10:05 Сейчас в теме
(9)
Код проанализируйте. Там не может быть другой тип
Прикрепленные файлы:
12. TODD22 18 14.07.17 10:17 Сейчас в теме
(10)
Код проанализируйте. Там не может быть другой тип

Речь была не о конкретном коде. А об утверждении что за такой подход надо руки отрывать.
GetNight; Award; Aletar; +3 1 Ответить
11. Артано 760 14.07.17 10:09 Сейчас в теме
(9) Если в переменной тип не булево, то это еще один косяк программиста. То что среда разработки позволяет писать говнокод еще не повод действительно писать его
lunjio; ResetAtreides; Fox-trot; Altair777; Octopus; +5 Ответить
13. TODD22 18 14.07.17 10:22 Сейчас в теме
(11)
Если в переменной тип не булево, то это еще один косяк программиста.

Конечно косяк программиста. А чей ещё?

То что среда разработки позволяет писать говнокод еще не повод действительно писать его

Но почему то люди пишут говнокод. И другим с ним приходится работать. В реальном мире живём... а не в сферическом конфигураторе в вакууме.
14. Артано 760 14.07.17 10:31 Сейчас в теме
(13)
Но почему то люди пишут говнокод. И другим с ним приходится работать. В реальном мире живём... а не в сферическом конфигураторе в вакууме.


И в чем смысл этого высказывания? А еще есть люди которые едят фекалии, как прокомментируете? Мол в реальном мире живем, пусть едят в общих столовых рядом с остальными? =)

Если некое отрицательное явление имеет сравнительно широкое распространение в отдельных нишах, то это не повод это явление возводить в норму.
16. TODD22 18 14.07.17 10:39 Сейчас в теме
(14)
И в чем смысл этого высказывания?

Перечитайте 10 раз если не понятно с первого. Ваше сравнение с фикалиями тут не уместно. Просто потому что открываю типовую розницу.
Открываю поиск по конфигурации и ввожу в поиск "Истина Тогда" и получаю 903 результата....

то это не повод это явление возводить в норму.

А кто то возводит?
Прикрепленные файлы:
GetNight; Award; +2 1 Ответить
19. Altair777 644 14.07.17 10:43 Сейчас в теме
(16) А кто пишет этот код? Стажеры малооплачиваемые.
Помню видел в каком-то регл.отчете комментарий примерно такой - "Не знаю зачем, на всякий случай"
20. TODD22 18 14.07.17 10:56 Сейчас в теме
(19)
А кто пишет этот код? Стажеры малооплачиваемые.

Может систему стандартов то же они писали?
21. Altair777 644 14.07.17 10:58 Сейчас в теме
(20) Вы часто упоминаете эту систему, но как-то в общем. Скажите конкретно, в чем я неправ в данном конкретном случае.
22. TODD22 18 14.07.17 11:06 Сейчас в теме
(21)
Скажите конкретно, в чем я неправ в данном конкретном случае.

А я где то утверждал что вы не правы?

Я вроде как написал что в коде может быть сравнение и это нормальная практика. Аргументировал вроде... скриншот приложил....
GetNight; Award; +2 1 Ответить
15. Altair777 644 14.07.17 10:38 Сейчас в теме
(13) Ну, тогда в каждой строке кода писать Попытку?
Чтобы уже точно защититься
17. TODD22 18 14.07.17 10:41 Сейчас в теме
(15)
Чтобы уже точно защититься

Если ты точно знаешь что твоя функция возвращает тип булево то нет. Как и написано в "системе стандартов". А если ты точно не уверен?
18. TODD22 18 14.07.17 10:43 Сейчас в теме
(15)
тогда в каждой строке кода писать Попытку?

Для начала не трактовать написанное в стандартах разработки буквально.
5. logarifm 1117 13.07.17 23:00 Сейчас в теме
Не совсем понимаю для чего там подписка на событие?

Молчу об РЛС.

- если пользователь вызвал просто перепровести из списка документа (что тут такого просто перепроведется документ не вижу никакого криминала);
- хотите ограничить права таким способом (пожалуйста), а что мешает в форме просто перед записью объекта проверку сделать
6. sanek_gk 105 14.07.17 08:20 Сейчас в теме
(5)
вызвал просто перепровести из списка документа (что тут такого просто перепроведется документ не вижу никакого криминала);
- хотите ограничить права таким способом (пожалуйста), а что мешает в форме просто перед записью объекта проверку сде

Религия! видимо автор хотел "модно" не снимать с поддержки ... но почему тогда не расширение которое как раз для этого и служит ... (конечно оно не такое новое как подписка на события)
Lok`Tar; Andreeei; manlak; +3 Ответить
8. Артано 760 14.07.17 09:35 Сейчас в теме
1000 и 1 способ выстрелить себе в ногу. Поставил минус - хочу в меру сил уменьшить шанс встретить поделия учеников такого мастера.
Кто считает, что слишком жестко - посмотрите другие публикации автора. Я не поленился перед выставлением минуса и коммента.
23. Altair777 644 14.07.17 11:09 Сейчас в теме
Вот пример из типовой (соседние строка кода)
Отказ = истина;
Если Отказ Тогда
	Сообщить("По договору "+Строка(Платеж.ДоговорКонтрагента)+" не указан Счет учета НДС (неподтвержденный)!");
КонецЕсли;

Кто такое мог написать?! Сколько нужно иметь извилин, чтобы не писать условие?
Прикрепленные файлы:
Артано; IvanovAV; klinval; DrAku1a; Just; +5 Ответить
24. Артано 760 15.07.17 07:12 Сейчас в теме
(23) Может быть индусы?
Dmitri93; +1 Ответить
25. Altair777 644 17.07.17 16:38 Сейчас в теме
(24) Суровый индусский код
Прикрепленные файлы:
IvanovAV; +1 Ответить
26. TODD22 18 17.07.17 17:04 Сейчас в теме
(23)
Кто такое мог написать?!

Что вас так смущает в этом коде? И как должно быть написано правильно?
27. Altair777 644 17.07.17 17:48 Сейчас в теме
(26) Вы что, издеваетесь? Или хочется пофлудить?
Dmitri93; +1 Ответить
28. TODD22 18 17.07.17 17:48 Сейчас в теме
(27)Исключительно в познавательных целях. Просто интересно в чём по вашему мнению ошибка?
30. Altair777 644 17.07.17 17:52 Сейчас в теме
(28)
Отказ = истина;
Сообщить("По договору "+Строка(Платеж.ДоговорКонтрагента)+" не указан Счет учета НДС (неподтвержденный)!");
32. Altair777 644 17.07.17 18:26 Сейчас в теме
(28)
ОбщегоНазначения.СообщитьОбОшибке("По договору "+Строка(Платеж.ДоговорКонтрагента)+" не указан Счет учета НДС (неподтвержденный)!"", Отказ);

Как правило, переменная Отказ уже объявлена
29. uri1978 137 17.07.17 17:50 Сейчас в теме
(26) Для чего нужна проверка условия
Если Отказ Тогда
? :)
31. Altair777 644 17.07.17 17:54 Сейчас в теме
(29) Ага. Но товарищу, похоже, это трудно понять
33. SeerRM 13 18.07.17 12:32 Сейчас в теме
Не хочу обидеть человека, но за такой код я бы руки отрывал. Ну хоть Ctrl + A, Alt+Shift+F нажимали.
34. Jako 48 19.07.17 09:08 Сейчас в теме
Ну просто все позабавились ...
35. Stim213 415 19.07.17 15:30 Сейчас в теме
Да ладно. Все так делают, когда времени мало, а базу можно курочить.

Но когда время есть и хочется сделать все правильно - делают через RLS.
А такие поделки обычно не выкладывают, ими стыдятся
36. NoRazum 29 19.07.17 18:57 Сейчас в теме
(35) вот прямо в точку. Либо студент и первое его перо.
37. YuriFm 20.07.17 01:12 Сейчас в теме
я такой код встречал когда человек с 7.7 переходил на 8. ещё не приловчился походу
38. Labotamy 21.07.17 15:20 Сейчас в теме
Код не по КодСтайлу. Запросы ужасны. Идея дрянь. Забаньте это пожалуйста.
39. IvanovAV 132 25.07.17 15:15 Сейчас в теме
Внедряли RLS в типовых, ничего нового не кодили, просто расставляли галочки в типовом РЛС в КА 1.1. Тот еще шлак получился, когда база тормозить стала. Нужно уметь курить этот RLS. В некоторых ситуациях, проще и надежнее, по старинке, как в 7.7 прописать, в стандартные процедуры. Зато не тормозит, и не нужно серверный ключик клиенту покупать.
Оставьте свое сообщение