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    14609    23    32    

34

Хранение секретов в Hashicorp Vault для 1С

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

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    2230    kamisov    14    

39

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

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

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

27.02.2024    3837    PROSTO-1C    10    

36

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

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

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

1 стартмани

27.10.2023    1921    platonov.e    1    

23

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

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

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

5 стартмани

24.04.2023    5681    18    soulner    7    

31

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

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

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

2 стартмани

08.12.2022    6288    34    Silenser    12    

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

чего-чего?

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

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

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

почему наименование, а не сама группа?
klinval; DrAku1a; JohnConnor; ResetAtreides; kote; chebser; Артано; sergpogo; TODD22; Andreeei; manlak; dnikolaev; eskor; +13 Ответить
2. Сурикат 396 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 645 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 645 14.07.17 10:05 Сейчас в теме
(9)
Код проанализируйте. Там не может быть другой тип
Прикрепленные файлы:
12. TODD22 18 14.07.17 10:17 Сейчас в теме
(10)
Код проанализируйте. Там не может быть другой тип

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

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

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

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


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

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

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

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

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

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

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

Я вроде как написал что в коде может быть сравнение и это нормальная практика. Аргументировал вроде... скриншот приложил....
GetNight; Award; +2 1 Ответить
15. Altair777 645 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 1120 13.07.17 23:00 Сейчас в теме
Не совсем понимаю для чего там подписка на событие?

Молчу об РЛС.

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

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

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

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

Как правило, переменная Отказ уже объявлена
29. uri1978 137 17.07.17 17:50 Сейчас в теме
(26) Для чего нужна проверка условия
Если Отказ Тогда
? :)
31. Altair777 645 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 133 25.07.17 15:15 Сейчас в теме
Внедряли RLS в типовых, ничего нового не кодили, просто расставляли галочки в типовом РЛС в КА 1.1. Тот еще шлак получился, когда база тормозить стала. Нужно уметь курить этот RLS. В некоторых ситуациях, проще и надежнее, по старинке, как в 7.7 прописать, в стандартные процедуры. Зато не тормозит, и не нужно серверный ключик клиенту покупать.
Оставьте свое сообщение