Настройка видимости элементов форм объектов по ролям, на уровне пользователя

25.08.11

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

Если вам лень самим колдовать с настройкой видимости относительно ролей - дайте мышку в руки администратору!

+ бонус... Вы не пробовали построить дерево элементов формы в 1С?  :D

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

Наименование Файл Версия Размер
Пример конфигурации
.zip 66,17Kb
191
.zip 66,17Kb 191 Скачать

Вот чувствую, что опять кто-нибудь напишет, как было со «Сканирочкой», что решение до безобразия простое… Что делать...  :( Когда клиент ставит самую что есть конкретную задачу, которую, казалось бы, сделал – и забыл, коварно подкрадывается мысль: «А нет ли у задачи более общего решения, чтобы потом …»

... Потом – не делать заново, когда похожая задача появится. Потом – продавать, если решение получится интересным. В крайнем случае, потом – попиариться на инфостарте, ведь это весело. :D

Вот и сейчас… Клиент просит настроить список колонок для формы списка конкретного документа, чтобы пользователи с разными ролями видели свои колонки. И ведь приложил список, для какой роли – какие колонки надо отображать! Большой список… Вобщем, представил я, как в ПриОткрытии буду тупо прописывать эти проверки и проставлять видимость колонок, и как-то тоскливо стало.  Их же … много! Выход: предоставить пользователю инструмент, чтобы сам он мог забавляться со своими колонками, сколько ему влезет. И кстати, если уж для конкретного объекта я это делаю, то почему не позволить делать такую настройку для любого объекта? Болезнь у меня такая…

В общем, получилось. Выкладываю. Пользуйтесь! 

 

 

Для использования сего нужно:

  1. В информационную базу добавить регистр (прилагается)
  2. Добавить обработку НастройкаВидимости
  3. В метод ПриОткрытии для форм того объекта, видимость полей которого предполагается настраивать, прописать: 

 

ОбработкаНастройки=Обработки.НастройкаВидимости.Создать();

ОбработкаНастройки.УстановитьВидимость(ЭтотОбъект,ЭтаФорма,"ФормаДокумента");

или, как вариант:

ОбработкаНастройки.УстановитьВидимость(СтроковыйИдентификаторОбъекта,ЭтаФорма,"ФормаДокумента");

 

 

где СтроковыйИдентификаторОбъекта - "Документы.ПриходнаяНакладная", "Справочники.Контрагенты" и т.д.

 

Все…

 

 

Описанный метод может быть использован при разработке конфигураций с нуля, для «ленивой» настройки видимости элементов форм объектов.

 

В архиве - пример конфигурации, где приведена настройка для разных пользователей по разным ролям видимости элементов форм справочников, документов...

 

 

ПС...

 

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

 

Привожу свое решение мистовского метода поиска принадлежности элементов формы к панелям. Я правда еще в своей настройке видимости разношу и по страницам эл-ты формы, но здесь - код только для разнесения по панелям. Думаю, пригодится коллегам.

 

// Основная функция. На выходе получаем дерево эл-тов формы, распределенных по панелям
// На вход подаем тип объекта ("Справочники", "Документы") и его имя из метаданных. 
Функция СтроитьДеревоЭлементовФормы(ТипОбъекта,ИмяОбъекта,ИмяФормы)
    ТабЭлтов=АнализаАднака(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    ТабЭлтов.Сортировать("Уровень Возр, ЭтоПанель Возр, Панель Возр");
    Береза=Новый ДеревоЗначений;
    Береза.Колонки.Добавить("ЭлементФормы");
    Форма=ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    ВзраститьБерезу(Береза.Строки,Форма,ТабЭлтов,0);
    Возврат Береза;
КонецФункции    

// Потребуется много раз получать форму, чтобы мучить ее элементы
Функция ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы)
    Если ТипОбъекта="Справочники" Тогда
        Объект=Справочники[ИмяОбъекта];
    ИначеЕсли ТипОбъекта="Документы" Тогда    
        Объект=Документы[ИмяОбъекта];
    КонецЕсли;
    Форма=Объект.ПолучитьФорму(ИмяФормы);
    Возврат Форма;
КонецФункции    

// Тут строим таблицу всех элементов и раскидываем их по панелям
Функция АнализаАднака(ТипОбъекта,ИмяОбъекта,ИмяФормы)
    Форма=ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    Панели=Новый Массив;
    ЭлТы=Новый ТаблицаЗначений;
    ЭлТы.Колонки.Добавить("Элт");
    ЭлТы.Колонки.Добавить("Панель");
    ЭлТы.Колонки.Добавить("Уровень");
    ЭлТы.Колонки.Добавить("ЭтоПанель");
    Для Каждого Эл Из Форма.ЭлементыФормы Цикл
        Нов=Элты.Добавить();
        Нов.Элт=Эл.Имя;
        Нов.Уровень=0;
        Нов.ЭтоПанель=Ложь;
        Если ТипЗнч(Эл)=Тип("Панель") Тогда
            Панели.Добавить(Эл.Имя);
            Нов.ЭтоПанель=Истина;
        КонецЕсли;    
    КонецЦикла;
    Для К=0 По Панели.ВГраница() Цикл
        ОбрабатываемПанель(ТипОбъекта,ИмяОбъекта,ИмяФормы,Панели[К],ЭлТы);
    КонецЦикла;    
    Возврат ЭлТы;
КонецФункции    

// А тут удаляем очередную панель и смотрим, что осталось
Процедура ОбрабатываемПанель(ТипОбъекта,ИмяОбъекта,ИмяФормы,ИмяПанели,ЭлТы)
    Форма=ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    ТекПанель=Форма.ЭлементыФормы[ИмяПанели];
    Форма.ЭлементыФормы.Удалить(ТекПанель);
    Для Каждого Стр Из ЭлТы Цикл
        Если Стр.Элт<>ИмяПанели Тогда
            Если Форма.ЭлементыФормы.Найти(Стр.Элт)=Неопределено Тогда
                Стр.Панель=ИмяПанели;
                Стр.Уровень=Стр.Уровень+1;
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
КонецПроцедуры    

// Ну это типа преобразование таблицы значений в дерево. 
// Рекурсия!!! И этим все сказано...
Процедура ВзраститьБерезу(ВеткиБерезы,Форма,ТабЭлтов,Уровень)
    Для Каждого Стр Из ТабЭлтов Цикл
        Если Стр.Уровень<>Уровень Тогда
            Продолжить;
        КонецЕсли;    
        НоваяВетка=ВеткиБерезы.Добавить();
        НоваяВетка.ЭлементФормы=Форма.ЭлементыФормы[Стр.Элт];
        Если Стр.ЭтоПанель Тогда
            ВзраститьБерезу(НоваяВетка.Строки,Форма,ТабЭлтов,Уровень+1);
        КонецЕсли;    
    КонецЦикла;    
КонецПроцедуры    

 

ППС...

Еще немалое удивление вызвал тот факт, что нельзя из формы нормальным способом узнать, к чему она относится. Впрочем, решение - есть. Почти... В некоторых (нормальных) конфигурациях имеется некий глобальный метод, который вызывается при открытии любой формы. Некий глПриОткрытии(ЭтаФОрма). Вот в этот метод можно кое-что прописать, чтобы не лезть в каждую форму списка, выбора или объекта.

Привожу пример решения для справочников. Т.е., по переданному ЭтаФорма ищем справочник, которому эта форма принадлежит и вызываем нашу обработку:

Найд=Ложь;
Попытка 
  МД=ЭтаФорма.ЭтотОбъект.Метаданные();
  Найд=Истина;
Исключение
КонецПопытки;
Если Найд Тогда
  Для Каждого Эл Из ЭтаФорма.ЭлементыФормы Цикл
    Если ТипЗнч(Эл)=Тип("ТабличноеПоле") Тогда
      Попытка
        МД=Метаданные.НайтиПоТипу(ТипЗнч(Эл.Значение));
      Исключение
        Продолжить;
      КонецПопытки;
      Если Метаданные.Справочники.Содержит(МД) Тогда
        Найд=Истина;
        Прервать;
      КонецЕсли;
    КонецЕсли;
  КонецЦикла;
КонецЕсли;
Если Найд Тогда
  Спр=Справочники[МД.Имя];
  Для Каждого Ф ИЗ МД.Формы Цикл
    Если Спр.ПолучитьФорму(Ф.Имя)=ЭтаФорма Тогда
      ОбработкаНастройки=Обработки.НастройкаВидимости.Создать();
      ОбработкаНастройки.УстановитьВидимость("Спраочники."+МД.Имя,ЭтаФорма,Ф.Имя);
      Прервать;
    КонецЕсли;
  КонецЦикла;
КонецЕсли;

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

См. также

AUTO VPN (portable)

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

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

1200 руб.

24.03.2020    14373    22    32    

33

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

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

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

27.02.2024    2388    PROSTO-1C    9    

29

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

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

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

1 стартмани

27.10.2023    1569    platonov.e    1    

23

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

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

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

5 стартмани

24.04.2023    5394    14    soulner    7    

29

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

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

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

2 стартмани

08.12.2022    5927    32    Silenser    12    

23

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

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

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

26.10.2022    9174    Tavalik    46    

113
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. O-Planet 6431 25.08.11 07:36 Сейчас в теме
Если вам лень самим колдовать с настройкой видимости относительно ролей - дайте мышку в руки администратору!

+ бонус... Вы не пробовали построить дерево элементов формы в 1С? :D


Перейти к публикации

1. Арчибальд 2706 25.08.11 07:36 Сейчас в теме
попиариться на инфостарте, ведь это весело
Согласен.
2. alexk-is 6533 25.08.11 08:02 Сейчас в теме
3. O-Planet 6431 25.08.11 14:26 Сейчас в теме
А вот как-то автоматизировать вызов этого в ПриОткрытии можно? Подпиской на события, например?
4. Spartan 365 25.08.11 15:01 Сейчас в теме
(3) Подписка на события работает только для событий объектов, но не их форм.
5. Sergey K 65 26.08.11 10:46 Сейчас в теме
по мотивам деструктивного анализа формы :)
уже года 2-3 используем подобную настройку видимости/доступности форм.
6. O-Planet 6431 27.08.11 02:12 Сейчас в теме
(5) Ога. Только написал, что мне их реализация ну очень не понравилась...
7. O-Planet 6431 27.08.11 04:49 Сейчас в теме
Добавил в описании вариант автоматизации вызова обработки :)
8. RustIG 1301 27.08.11 22:43 Сейчас в теме
(0) Интересно, сколько затрачено времени?
И сколько заплатил клиент? Задаю эти вопросы не из праздного любопытства, а для понимания, кому это надо и надо ли за такие деньги?

Заранее оговорюсь, что конфу не смотрел и выводы делаю по написанному...
Я бы реализовал не для ролей конфигурации, а для групп ролей (при чем других "ролей": не из конфигурации, а выделил бы функциональные роли через объект метаданных Перечисления: например, Операторы, Контролеры, Аудиторы и т.д. по смыслу)
Далее, я не стал бы заморачиваться над универсальностью, т.к. наверняка по ситуации надо ограничить видимость конкретных элементов для конкретных форм.

Сама идея задачи мне нравится, также нравится статья, только вот почему-то разбираться в опубликованном коде не хочется...
Автор, спасибо!
9. O-Planet 6431 27.08.11 23:58 Сейчас в теме
(8) Затрачено часа четыре. Клиент заплатит за комплекс работ, в районе 20 тыс. Это - где-то пятая-восьмая часть того, что нужно сделать.
10. RustIG 1301 28.08.11 00:28 Сейчас в теме
(9) 4 часа - это продуктивное время на разработку (без анализа, предварительного проектирования, постановки ТЗ) ? или по факту: от момента анализа задачи (возникновения идеи) до последнего тестирования функциоанала?
Такого ответа я не ожидал, я бы затратил на все про все весь день: чтобы идею родить, воплотить: форму разработать, прописать установку видимости где нужно, протестировать и т.д. Нюансы на поверхности не видны....
...посмотрю-ка я выложенный пример конфигурации
11. O-Planet 6431 28.08.11 03:24 Сейчас в теме
(10) Анализ на такую задачу? И где эти заказчики, кто до конца понимает, чего хочет? Получил задачу, прикинул, что же нужно заказчику, прикинул, можно ли обобщить, прикинул, как реализовать, а потом - просто начать писать, большинство вопросов становятся понятны по ходу. Ну, может, пять часов... Но точно не весь день. Я ж фрилансер, тут со сроками жестко очень: какие-нибудь казахские программисты запросто начнут демпинговать, если со сроками затянешь и с ценой оплошаешь :D
14. RustIG 1301 20.03.12 20:43 Сейчас в теме
(11) Недавно продал ваше решение клиенту. Клиент доволен. Смысл задачи - приезжает ревизор, а бухгалтер нажимает одну чудо-кнопку, и часть информации не отображается в формах...
решение немного доработал конечно, но за основу взял ваш код... спасибо :)
12. Psylocibine 29.08.11 07:30 Сейчас в теме
У меня вот конфа не разворачивается, говорит "Ошибка формата потока"
А посмотреть любопытно очень)
13. Yashazz 4707 29.08.11 12:39 Сейчас в теме
Да-а-а, я когда-то делал такую на 7.7, с деревом объектов. Дерево строилось динамически для любой конфигурации.
Правда, скажу честно, строилось довольно топорно и долго, но чисто штатными средствами.

Мало нужная вещь, на практике редко у кого доходят руки грамотно всё настроить, и кончается дело либо каскадом умолчаний, либо всеобщим отключением этих ограничений в пользу более локально, "по месту" сделанных, либо гипер-супер-динамикой с использованием фрагментов кода.
И всё это начинает сильно напоминать аналог RLS плюс возможности функциональных опций 8.2, сиречь изобретение велосипедов.
15. Tina_10 10.04.13 11:57 Сейчас в теме
Добрый день! У меня платформа 8.2.17, конфигурация - розница (1.0.16). При снятии флажков в обработке "Настройка видимости" нечего не происходит...
16. Profit05 14.12.13 12:24 Сейчас в теме
17. Alexey_ 26 19.05.15 10:11 Сейчас в теме
можно использовать альтернативу деструктивному анализу
http://infostart.ru/public/345430/
18. grin_64 36 19.05.16 12:21 Сейчас в теме
Круто! Я переделал роли в пользователи
Оставьте свое сообщение