Подсистема прав доступа (анализ ролей, отладка RLS, английский код, обычные и управляемые формы)

28.10.21

Администрирование - Роли и права

Доброе время суток. Я как обычно – с интересностями. И в этот раз мы поговорим о такой жуткой штуке – как RLS, генерация расширений на лету, и обратим внимание на одну интересную особенность «Полных прав» и про английский сорцкод. Статья не является «продажной», ибо решение специфическое, кому надо, тот знает, что покупает. Однако, в этой статье я расскажу про кучу тонкостей, с которыми мы столкнулись и как оптимизировали. Так что не забудьте открыть все спойлеры :)

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Подсистема прав доступа (анализ ролей, отладка RLS, английский код, обычные и управляемые формы):
.cfe 532,87Kb ver:1.0.8.241
298
298 Скачать (5 SM) Купить за 3 050 руб.

Немного про проблемы, которые мы хотели решить этой подсистемой

Представим себе ситуацию, что у нас есть некая конфигурация, типовая, или нет – не важно. И представим себе, что у нас реально возникает много проблем, связанных с ролями. Ну как минимум, давайте перечислим основные:

  1. Нельзя прочитать RLS, т.е. внедренец ставя ограничение на роль – вообще без понятия о том, что там эта роль реально ограничивает и по каким правилам. Например, есть некая роль:

Глядя на нее в конфигураторе - можно прочитать текст ограничения, и понять, как оно сработает.

  1. Роли, при наличии БСП, хоть и являются «универсальными», однако, они все равно не перекрывают все потребности. А особую сложность в понимании несут роли, которые дают доступ к разным объектам. Т.е. надо четко уметь отделить некое право, и посмотреть – какие роли его дают. В идеале – одна роль, дает одно право.
  2. В конфигурациях бывают баги, а бывают тонкости, про которые далеко не все знают, например, одна роль на чтение может иметь РЛС на некий справочник, а совсем левая роль на изменение (от другой подсистемы), может к этому справочнику давать безусловное чтение. Баг это, или фича, не важно, но такое есть, и хорошо бы такое отлавливать.
  3. Отдельное счастье – отладка RLS, что сейчас в принципе невозможно, так как язык RLS – он не тот же самый язык 1С (BSL), и просто написать – не всегда получится.
  4. Любое изменение роли – требует лезть в конфигуратор. Любое добавление – роли, надо идти в конфигуратор, надо тестировать под пользователем, открывать все параметры сеансов, смотреть что где, в общем трешь.
  5. И когда выходит обновление конфы – надо перепроверять, не обновились ли шаблоны, и если они обновились, то тогда надо вот в те новые 10 ролей идти, и перекидывать шаблоны, обновлять каждую роль.
  6. История изменения ролей. Кто, когда, зачем и на кой черт попросил что-то поправить. Т.е. т.к. роли добавляет программист, то он берет все входные данные и группирует их, а потом идет делает новые роли, или модификацию предыдущих, и вот потом разобраться – зачем была та или иная модификация, или же – какая модификация была на какую-то там дату – это не реально, разве что в задачниках, но и там надо каждый чих отслеживать, и как-то группировать, чтобы найти.
  7. Ну и мой самый любимый прикол – это когда тебе попадается в руки УТ10, УТП и им подобные, где уже никто ничего не понимает, что творится в ролях, никакого анализа адекватного нету, и пользователей просто создают «по аналогии», так как там изначально всего десяток ролей.
  8. И куча всякого другого…

Принятое решение

Итого, была поставлена задача по написанию принципиально нового подхода к разработке ролей:

  1. Это будет внешняя подсистема, отсутствие которой никак не скажется на конфигурацию. Т.е. модульность.
  2. Подсистема должна быть универсальной, и не привязываться, практически ни к каким модулям конфигурации или ее объектам.
  3. Основные функции системы – анализ ролей, отладка правил, создание новых ролей, хранение истории изменения ролей и т.д.

И такая подсистема была создана.

Вся суть работы с подсистемой - описывается в пару шагов:

1. Подключение расширения к конфигурации

2. Загрузка ролей из XML

3. Создание новых ролей

4. Авто генерация нового расширения с новыми ролями

5. Назначение новых ролей пользователю теми же механизмами, которыми назначаются новые роли просто созданные в конфигураторе.

Как это все выглядит?

1. Подключается новое расширение, возьмем для примера УТ11:

  1. Параметры, пока оставим их, но суть в том, что можно создавать свои параметры сеанса.
  2. Пользователи – это просто сам справочник пользователей, из основной конфигурации.
  3. Профили доступа – этот справочник, по сути, аналогичен типовым из БСП, там просто есть таблица с ролями, и это позволяет комбинировать роли для конкретного пользователя, например.
  4. Роли доступа — это справочник самих ролей, вот прям ролей, которые есть в конфигурации.
  5. Шаблоны – это шаблоны ролей. У 1С в конфигурации нет единого объекта шаблонов ролей, а на каждую роль – идет свое, однако, в нашем случае – это единый общий справочник.
  6. Отчет, который позволяет проанализировать роли.
  7. Загрузка данных ролей из XML.
  8. Конвертация шаблонов в код BSL.
  9. Генерация и подключения расширения с новыми ролями.
  10. Используется для обычных форм, это просто обработка с теми же 3 кнопками, что и выше.

2. Идем в опцию загрузки ролей "Загрузка данных ролей из XML" , и загружаем роли:

При открытии - программа определит текущее подключение и заполнит настройки:

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

При загрузке, если что-то пойдет не так, то программа покажет лог. Status отличный от нуля - значит произошла ошибка.

Если есть ранее выгруженная конфигурация в XML файлы (это можно сделать  зайдя в конфигуратор, и выбрав меню "Конфигурация - Выгрузить конфигурацию в файлы", или же есть конфигурация в исходниках формата EDT, то можно выбрать третий пункт - "XML файлы конфигурации" и указать путь к верхней папке, т.е. внутри этот папки должна быть папка Roles, по сути, только она и нужна, остальные папки не сканируются.

 
 Команда выгрузки конфигурации в XML
 
 Определение уникальности роли 
 
  Особенности галочки "Устанавливать права для новых объектов"

3. Теперь можно провести анализ ролей. Давайте откроем какую-то роль, и посмотрим - что там?

 

Изначально, открывается отчет, который позволяет просто сделать быстрый беглый анализ того, что дает, или запрещает эта роль. Т.е. тут четко видно - какие права доступа дают, какие RLS при этом действуют и т.д.

 
 Остальные закладки дают дополнительную информацию по роли

И, самое главное - матрица ролей:

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

По умолчанию - выводятся только те объекты, к которым дан доступ, однако, если надо добавить объекты, то в этом случае - можно выбрать опцию "Все объекты" и нажать кнопочку "Обновить права", тогда матрица перестроится.

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

 
 Вводная по особенностям

 В основном, все проблемы крутятся в данном случае вокруг того, что для 1С тут слишком много данных выводится, например, в случае УТ11, если показать все объекты, то программа должна будет вывести 35 000 строк объектов, и все это умноженное на 86 колонок, или, другими словами - около 3 000 000 ячеек.

 
Зачем нужен макет на первой вкладке, если он дублирует матрицу?
 
Контекст и БезКонтекста
 
Условное оформление на 80+ ячеек
 
 Всякие иконки 🌹🎉🎶🤦‍ ...
 
 Оптимизация работы с областями табличных документов
 
 Не забываем про индексирование колонок в таблице значений, ускоряемся на порядок

 

4. Справочник профилей

На самом деле - это справочник, в котором просто собираются разные роли, по типу такого же справочника в типовых, на БСП. Однако, этот справочник более ничего не делает. Он позволяет только делать анализ.

Если конфигурация написана на БСП, то в этом случае - можно скопировать профили из текущей конфигурации сюда, для этого есть специальная кнопка:

И давайте откроем любой профиль:

Тут видно, что есть галочки разных вариантов, простая галочка - говорит что доступ к этому праву этого объекта дает ТОЛЬКО ОДНА роль. Что по-хорошему и должно быть.

В случае галочки в черном квадрате - это значит, что несколько ролей дают доступ, причем как видите - ниже пишется сам RLS, который ограничивает чтение. Однако, обратите внимание на то, что роль перечеркнута - это значит, что одна из ролей которая дает доступ к этому объекту по этому праву - не имеет RLS, т.е. в этом профиле - не будет действовать ограничение по этому регистру на чтение.

Так же - справа подсвечиваются зеленым цветом те роли, которые, собственно, и дают это самое право.

 
 Еще несколько особенностей этого отчета

5. Отчет по правам доступа

Однако, очень часто возникают задачи - узнать, какие роли дают право доступа к конкретному объекту, и с какими ограничениями.

Например, прилетела задача - нам надо сделать пользователю роль, где он сможет читать возвраты клиентов с отбором по подразделению. Возникает вопрос - а есть ли вообще такая роль?

Значит идем, и формируем отчет:

Указывает часть пути к объекту, который нас интересует, это может быть любая часть из примера строки:

InformationRegister.ОчередьСообщенийИСМП.StandardAttribute.Active

Т.е. идет поиск по вхождению, и есть стоит отдельное право на разрешение или запрет чтения реквизита, то и по реквизитам тоже поиск может делать.

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

После этого можем указать тип объекта - документ, справочник и т.д.

И в завершение можем указать само право. Что мы и сделаем, так как вывелось сильно много информации.

Тогда отчет будет выглядеть вот так:

Тут сразу видно - какие роли дают доступ к документу, в каких профилях они находятся, и какие RLS их ограничивают.

Т.е. сразу понятно - что к чему.

И мы сразу видим, что роль, которая нас интересует - это роли ДобавлениеИзменениеВозвратовТоваровОтКлиентов или ЧтениеВозвратовТоваровОтКлиентов.

 
 Вывод картинок в отчете

6. Анализ и дебаг RLS

Все было бы скучно, если бы мы ограничились только просмотром, а что если нам поставили задачу, и сказали - сделайте ограничение, чтобы некий пользователь мог видеть только заказы, вне статуса Закрыт. Т.е. все не закрытые заказы. Это на самом деле становится не редкой задачей, в связи с мобильным клиентом, когда надо максимум всего скрыть в угоду производительности.

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

По такому же принципу как и ранее - мы находим нужную нам роль, это будет роль - ДобавлениеИзменениеЗаказовКлиентов.

Копирую роль в справочнике ролей и пишу другое название, например - ДобавлениеИзменениеЗаказовКлиентовСЧтениемПоСтатусу, и не забываю переименовать на вкладке наименований, а то иначе у меня будет две роли с один и тем же синонимом.

Идем в матрицу ролей, находим нужное место и видим RLS:

Нам надо дописать условие, и если мы четко знаем как это сделать - то можем это написать прям тут. Однако, я не помню где и как это прописывать. Допустим, я хочу задать вот такой вот код:

#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.ЗаказКлиента","Чтение","",
"Организации","Организация",
"Склады","Склад",
"ГруппыПартнеров","Партнер",
"Подразделения","Подразделение", 
"НЕ Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.Закрыт")","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли

Итого - дописали вот такую строку:

НЕ Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.Закрыт")

Однако, как проверить - правильно ли я написал?

Для этого - открываем этот RLS по кнопочке "Открыть", прям в этом поле и вижу вот такую картинку:

Тут все просто:

1. Имя текущей таблицы - по умолчанию, это имя текущего объекта

2. Имя доступа - берется из матрицы, обычно это Чтение, Изменение, Удаление, Добавление.

3. Поговорим позже. Отвечает за ситуацию, когда вы используете в RLS параметры сеанса, но они должны быть не теми, которые сейчас.

4. Сам текст RLS

5. Шаблоны, которые привязаны к текущей роли

6. После  нажатия кнопки "Конвертировать в запрос" - вы получаете результирующий код запроса. И обратите внимание - 1С внизу мне вывело текст ошибки, это значит, что можно уже не перезаходить в базу под кем-то, ибо работать все равно не будет.

7 - 10 - используются для формирования запроса. Обычно в 7 пишут что типо:

Т ГДЕ

А в 8:

Выбрать Т.Ссылка Из Документ.ЗаказКлиента Как Т ГДЕ

Т.е. мы формируем валидный запрос.

11. Выводится результат запроса.

 

Исправляем ошибку:

#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.ЗаказКлиента","Чтение","",
"Организации","Организация",
"Склады","Склад",
"ГруппыПартнеров","Партнер",
"Подразделения","Подразделение", 
"","НЕ Статус = ПредопределенноеЗначение(Перечисление.СтатусыЗаказовКлиентов.Закрыт)", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли

Т.е. перенесем во второй параметр условие, и уберем кавычки, так как в запросе они не нужны.

Теперь программа вернет "нормальный" текст запроса:

Пробую выполнить, и получаю ошибку, естественно. Т.е. система не позволит допустить даже такие ошибки. Исправляю ошибку, меняю "ПредопределенноеЗначение", на просто "Значение", нажимаю "Конструктор запросов" и выравниваю запрос, и сразу могу его выполнить.

Однако, если его выполнить, то БСП вернет пустой список, так как у пользователя Администратор - нет никаких настроек в БСП.

Для исправления этой ситуации - переходим на вкладку Параметры сеанса, и установлю параметр АвторизованныйПользователь в значение тестируемого пользователя, в моем случае это - Гладилина Вера Михайловна, менеджер. Далее, необходимо поставить галочку "Использовать параметры сессий из таблицы" и теперь можно выполнить запрос:

 
 Дебаг и конвертация RLS в BSL

 

7. Создание новых ролей в конфигурации

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

Для начала - нам надо немного обновить эту роль, а именно - всем объектам входящих в нее дать право на просмотр/редактирование стандартных реквизитов, по умолчанию - расширение их не ставит.

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

Для того, чтобы она там появилась, мы жмем кнопку "Обновить расширение" и меню сервиса нашей подсистемы.

 
 Что происходит в этот момент

В этот момент в систему добавляется новое расширение, которое содержит в себе указанную ранее роль.

Далее дело за малым, идем в профили, убираем старую роль и даем новую и все, можем теперь зайти под этим пользователем и убедиться, что все сработало на ура :)

8. Свои параметры сеансов

А что, если надо дать этот запрет ТОЛЬКО в том случае, когда мы заходим мод мобильным клиентом, например, а если под стационарным, то все должно быть видно.

В этом случае - нам надо создать свой параметр сеанса, и поставить отбор по нему.

Тогда создаем новый параметр:

Ставим галочку "Использовать код", и прописываем код установки этого параметра:

SessionParameters.AccRoles_isMobileClient = ОбщегоНазначения.ЭтоМобильныйКлиент();

Тут есть один нюанс - имя параметра имеет префикс "AccRoles_" и надо не забывать его прописывать.

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

Потом идем в роль, и дописываем условие:

#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениям( "Документ.ЗаказКлиента","Чтение","",
"Организации","Организация",
"Склады","Склад",
"ГруппыПартнеров","Партнер",
"Подразделения","Подразделение", 
"","НЕ Статус = Значение(Перечисление.СтатусыЗаказовКлиентов.Закрыт) 
     OR Not &AccRoles_isMobileClient", 
"","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли

После этого - обновляем расширение и заходим под тем пользователем, и все. Теперь вод тонким клиентом видны все заказы, а под мобильным - только не закрытые.

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

Таким образом - эта система позволяет настроить почти любую сложность роли, и создавать свои параметры сеансов.

 

9. Обычные формы и расширение...

Мы уже говорили о том, что это расширение прекрасно работает и с обычными формами? Условие только одно - совместимость на 8.3.14.

Если говорить про управляемые формы, то там уже достаточно гибкая подсистема прав доступа, а вот с обычными формами - все грустнее.

Давайте возьмем типовую УТ10 и накатим на нее все тоже самое.

 
 Для начала - поднимем совместимость

Теперь подключаем расширение, если не нужен английский язык, то удаляем его, если не нужен русский - то удаляем его. В случае ERP - там уже есть английский, поэтому надо просто переименовать с English, на Английский:

И не забываем пользователям дать права, по умолчанию - две роли, для Админа, и для всех остальных пользователей, и у пользователя, у которого обновляем расширение, снимаем защиту от опасных действий, либо отключаем профилями безопасности:

Если все сделано хорошо, то тогда в Операции - Обработка, вы сможете найти обработку с названием "Роль команд для общих форм": 

Открываем ее, нажимаем "Загрузить роли из XML". Закрываем конфигуратор, если он был открыт. Выбираем тип подключения к базе, и заполняем данные, или указываем просто путь к папке, куда заранее были выгружены файлы XML конфигурации.

Жмем "Загрузить роли" и видим, что система подгрузила 18 ролей:

И теперь можем открыть любую роль:

Ну а дальше уже - можно создавать роли, копировать и модифицировать, ставить ограничения и кучу всего другого.

 

FAQ

Не большой FAQ для разработчиков и тех, кому интересно.

 
 Почему используется выгрузка DumpConfigToFiles вместо DumpConfigFiles с параметром Right?
 
 Как происходит генерация расширения с учётом кучи свойств?
 
 Проблемы с русским и английским скриптом
 
 
 Загрузка ролей из другой версии выгрузки 1С

 

Преимущества:

1. Не зависит от конфигурации

2. Работает с конфигурациями на базе БСП и без них

3. Работает с английскими и русскими конфигурациями

4. Работает с обычными и управляемыми формами

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

6. Не влияет на обновления, а если пришли существенные изменения в механизме ролей - позволяет их отладить и перегенерировать роли.

Кому этот продукт может быть нужен?

1. Разработчикам для анализа прав доступа, особенно в  те моменты, когда принимают новых клиентов на обслуживание

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

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

4. Безопасникам - так как они смогут анализировать реальные права доступа

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

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

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159403    872    399    

861

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

16800 руб.

06.12.2023    8842    42    5    

73

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10415    36    21    

61

SALE! 20%

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 4752 руб.

27.05.2021    37560    264    92    

205

Логистика, склад и ТМЦ Роли и права Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

4560 руб.

21.05.2019    1694762    570    194    

137

Ценообразование, анализ цен Роли и права Системный администратор Платформа 1С v8.3 Управление правами 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С УНФ. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

3000 руб.

23.02.2018    58452    160    261    

152

Роли и права Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

19200 руб.

29.11.2019    25657    16    8    

37
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1563 18.10.21 15:07 Сейчас в теме
Дима, замечательная публикация.
Огромное спасибо за технические подробности и описание борьбы с проблемами.

Мы внутри Инфостарта также используем работу с исходниками (выгрузка, чтение, корректировка, загрузка в 1С) для корректировки ролей в наших внутренних инструментах
user1636469; +1 Ответить
2. DitriX 2101 18.10.21 15:08 Сейчас в теме
(1) всегда пожалуйста, ждем ваших пулов :)
3. artbear 1563 18.10.21 15:08 Сейчас в теме
(2) Опечатку "sonar cube" исправь на SonarQube
4. DitriX 2101 18.10.21 15:10 Сейчас в теме
(3) ага, спс, чето видать редактор поменял на автомате :) Буду у компа - пофиксю
5. logarifm 1122 18.10.21 19:40 Сейчас в теме
Долго ждал выхода... Сразу "+".
Как только будет время все прочитаю и оценю.
8. DitriX 2101 19.10.21 10:55 Сейчас в теме
6. rpgshnik 3795 19.10.21 04:11 Сейчас в теме
Однозначно лайк! Как меня пугают всегда эти три буквы "Р", "Л" и "С" где роли понакопировали с типовых :) Скачкой тоже поддержу!
9. DitriX 2101 19.10.21 10:57 Сейчас в теме
(6)да. Та даже типовые теперь легко читать. А то там тоже косякоф дофига.типо есть рлс с отбром подразделения на чтение. Но нет на добавление и изменение - т.е. Добавить документ можно. А прочитать нельзя. И он просто исчезает :)
rpgshnik; +1 Ответить
7. &rew 52 19.10.21 10:14 Сейчас в теме
Просто, держите мои стартмани.
rpgshnik; +1 Ответить
10. DitriX 2101 19.10.21 10:57 Сейчас в теме
(7)не хватает пикчи Фрая :)
akR00b; &rew; +2 Ответить
11. Dach 382 19.10.21 12:36 Сейчас в теме
(0) Если на справочник есть несколько ролей, имеющих РЛС на чтение - отчет по анализу их покажет? Как он покажет, если эти РЛС одинаковые и как - если разные?
12. DitriX 2101 19.10.21 12:40 Сейчас в теме
(11) там два отчета. Первый - это скд, где вверху может быть объект, а ниже - роли и их рлс.
Второй - это по профилям. Т.е. вы выбираете профиль конкретный, и он показывает к каким обхектам какие роли дают доступ, в ом числе и рлс.
Отчеты никак РЛС не сравнивают, а выводят все что есть.
Но если надо, то можно в отчете СКД немного подшаманить и сделать вывод только РАЗЛИЧНЫЕ.

Едиственное что отчет вычисляет - это максимум. Т.е. если есть роли где идет органичение по РЛС и есть роль где нет РЛС, а безусловная доступность, то в верхнем уровне отчет покажет что там безусловный доступ, но в расшифровкке будут видны РЛС
13. Dach 382 19.10.21 13:01 Сейчас в теме
(12)
Едиственное что отчет вычисляет - это максимум. Т.е. если есть роли где идет органичение по РЛС и есть роль где нет РЛС, а безусловная доступность, то в верхнем уровне отчет покажет что там безусловный доступ, но в расшифровкке будут видны РЛС


Вот это очень удобно! А нельзя отчет заюзать отдельно от подсистемы целиком? Если можно - может быть выложите его отдельно прям в этой же публикации?
14. DitriX 2101 19.10.21 13:02 Сейчас в теме
(13) не, не выйдет, он завзан на метаданные расширения. Так что увы, никак. А без парсинга - вы не сможете увидеть сами РЛС.
Т.е. получится что-то типо стандартного отчета БСП по правам.
15. &rew 52 19.10.21 13:28 Сейчас в теме
Подключил, смотрю. Есть у меня отчет в расширении. В анализе доступов я его пока не вижу. Суть проблемы в чем. Есть отчет, встроенный в расширение. Есть ограничение доступа на уровне записей. Когда отчет сохраняю как внешний РЛС отрабатывает безупречно, когда формирую встроенный (в расширение) - данные выводит с группировкой Объект не найден. Думаю дай ка попробую посмотреть системой доступа...
16. DitriX 2101 19.10.21 13:31 Сейчас в теме
(15) не понял, если честно :( Можно поподробнее?
17. &rew 52 19.10.21 13:38 Сейчас в теме
(16)Есть конфа КА2. Есть расширение (другое, не это))) с нужным отчетом. У этого расширения есть "Основная роль" (хотя это может и не важно). В этом (моём) расширении есть отчет. И все в нем чин чинарем, ВЫБРАТЬ РАЗРЕШЕННЫЕ где нужно установлено. Так вот, когда я формирую отчет встроенный, он (отчет) видит суммы по подразделениям, по которым настроено ограничение РЛС (сами подразделения при этом - <Объект не найден>). Но, когда я сохраняю этот отчет как внешний и запускаю, то он отрабатывает как и задумано было, т.е. выводит только разрешенные подразделения, без всяких "битых" ссылок. Вот я и хотел попробовать такую задачку с помощью этого инструмента раскурить.
18. DitriX 2101 19.10.21 13:43 Сейчас в теме
(17) главный вопрос какой - роль которая ограничивает права, она где? в том же расширении? или в ядре?
Тут просто вопрос в чем - если отчет видит данные, значит у него есть доступ к регистру, однако, так как он видит битые ссылки, значит у него нет доступа к самому справочнику.
Покурите в эту сторону. Т.е. убедитесь, что вы там не дали роль, которая имеет полный доступ к самому регистру.
19. &rew 52 19.10.21 13:47 Сейчас в теме
(18)Эх, если бы так, то я бы и внешним отчетом получил аналогичный результат. Получается в расширении у него на Чтение доступ есть, а на просмотр - нет, но как только мы его выгружаем во вне, то он "хоба" и прочесть уже не может (собственно и не должен). Но это не к инструменту вопрос а к задаче.
20. Yashazz 4790 19.10.21 13:54 Сейчас в теме
Если не секрет: эта подсистема делалась для какого-то коммерческого проекта? Силами скольких людей? За какое время?
21. DitriX 2101 19.10.21 14:02 Сейчас в теме
(20) да, у нас есть свое решение, которые мы разрабатываем на волне того, что устали от типовых, и начали пилить свой велосипед.
И там у нас нет ролей в конфигурации вообще, так как роли - это отдельный геммор и у каждого клиента они свои.
Поэтому мы разработали эту подсистему, чтобы можно было просто на лету генерировать роли под клиента.

Ну а потом решили поделиться с сообществом, так как решение получилось универсальным. А мы топим за модульность :)
Конкретно это расширение писал я, заняло у меня около месяца.

Если интересно про ядро почитать, то можно познакомиться с ним тут https://github.com/IRPTeam/IRP.
22. Mozgolom1988 20.10.21 15:13 Сейчас в теме
Ошибка при загрузке...
Прикрепленные файлы:
23. DitriX 2101 20.10.21 15:28 Сейчас в теме
(22) да, не думал что кто то на такое попадет.
Когда создается роль, то в табличную часть пишется ее парсинг.
Сейчас вы попали на какуюто роль, где количество прав более 100 000.
Это похоже на ну очень мега кривую роль, и такое можно добиться толко если роли поставить галочку - использовать для новый объектов, а потом снять все галочки.
Поэтому боюсь, что эту роль вы этой системой не загрузите, так как упретесь в пределы именно ограничения самой платформы 1С.
Что делать?
Если вы явно знаете что это за роль - просто удалите папку этой роли из xml, если не знаете, то просто идите методом половин, т.е. удалите половину всех папок с ролями, загрузите, если прошло, то удалите все папки, и скопируйте еще половину из иоставшихся, и т.д.
Пока не нарветесь на роль.

А когда вычислите что это за роль - то попытайтесь понять, все с ней в порядке?
24. DitriX 2101 20.10.21 15:30 Сейчас в теме
(22)дежите меня вкурсе про ваши успехи, у вас походу очень интересный случай. Можете мне в теграм написать, чтобы онлайн связь была @DitriXNew
25. Mozgolom1988 20.10.21 16:14 Сейчас в теме
(24)

Я завтра при записи думаю вытащить ее название и посмотрю что за роль. Попробую ее удалить и повторить загрузку. Отпишусь по результату (конфигурация "1С Управление Холдингом")
26. DitriX 2101 20.10.21 19:06 Сейчас в теме
(25) у меня нет доступа к этой конфе, максимум тестировал на ЕРП
27. Mozgolom1988 21.10.21 09:09 Сейчас в теме
(24)
все получилось, добавил код где запись в Попытку и в исключение вывел имена ролей.
Отдельно у себя посмотрю эти роли (4 штуки были и все добавленные).
28. DitriX 2101 21.10.21 13:04 Сейчас в теме
(27) отлично. Надеюсь что вы отпишите - как такое получилось. На будущее так сказать :)
29. ids79 8535 29.10.21 18:25 Сейчас в теме
Хороша разработка. Даже если и не применять, можно использовать много чего полезного для себя. Например отладка RLS
30. suhoi 25 26.01.22 15:07 Сейчас в теме
Конфигурация БГУ2
Нужно настроить РЛС по подразделениям (по аналогии с Организациями)
Можно с помощью Вашего расширения это сделать?
31. DitriX 2101 26.01.22 15:11 Сейчас в теме
(30) я не знаю что это за конфа, но в теории - да, эта система просто создаешь расширение с РЛС. Но лучше почитайте внимательно статью, чтобы понимать что система делает.
На УТ10 и на УТ11 все работает. Так что если это не конфа в режиме совместимости с 8.2 то все должно быть ок.
32. fullstack1c 36 03.02.22 09:53 Сейчас в теме
Добрый день! :)

Платформа 8.3.20.1590
Конфигурация 1С:Комплексная автоматизация 2 (2.5.7.279)
Команда Загрузить роли начинается и не завершается, бесконечно уходит в работу...так и должно быть?
33. DitriX 2101 03.02.22 14:53 Сейчас в теме
(32) нет, так быть явно не должно, но надо понять в чем причина, попробуйте загрузить в режиме отладки, и посмтрите - где оно зависает.
А я пока попробуй посмотреть что там с 20 платформой
34. ser6702 174 17.05.22 18:12 Сейчас в теме
А будет ли работать с Документооборотом 2.1? Там накрутили с правами
35. f87 16.06.22 20:14 Сейчас в теме
Поле объекта не обнаружено (SetSeparateRightToStandardAttributes)
{Roles ОбщийМодуль.Roles_RoleMatrix.Модуль(172)}: If Roles_Settings.hasStandardTabularSections(Meta) And ParamStructure.ObjectData.SetSeparateRightToStandardAttributes Then
{Roles ОбщийМодуль.Roles_RoleMatrix.Модуль(69)}: addSubtypeRow(MetaItem, MetaItemRow, ParamStructure);
{Roles Справочник.Roles_AccessProfiles.Форма.ItemForm.Форма(164)}: TabDocMartix = Roles_RoleMatrix.GenerateRoleMatrix(RoleTree, ObjectData, True, True);
{Roles Справочник.Roles_AccessProfiles.Форма.ItemForm.Форма(68)}: UpdateMatrixAtServer(AllRights);

Версия 1.0.8.241
36. triviumfan 97 17.06.22 11:42 Сейчас в теме
При открытии роли, переходе в матрицу и двойной клик на объекта метаданных получаю ошибку.
Поле объекта не обнаружено (RolesEditObjectFullName)
{Roles Справочник.Roles_AccessRoles.Форма.ItemForm.Форма(321)}:	ElsIf CurrentRow[Field.Name] Then
{Roles Справочник.Roles_AccessRoles.Форма.ItemForm.Форма(139)}:	SetFlags(CurrentRow, Field);

Плюс загрузка из файлов XML не работает. Ничего не происходит. Отлаживать сие решение нереально - весь код на английском. И проблема не в том, что я с ним не знаком, как раз наоборот, проблема в нечитаемости, невозможности поиска методов платформы в синтакс-помощнике (да, он глупый и в большинстве случаев ищет только на русском языке).
Так и не понял, как мне воспользоваться отладкой шаблона.
1.0.8.241
Прикрепленные файлы:
37. user1808757 13.09.22 11:43 Сейчас в теме
криво работает на конфе Управление Холдингом. роли из XML не хочет находить, выдает ошибку:
Поле объекта не обнаружено (ExclusiveModeTerminationAtSessionStart)
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(165)}:NewObject.RightName = Enums.Roles_Rights[ObjectRight.name];
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(264)}:LoadRightsToDB(RightObject, Text);
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(40)}:LoadFromXMLFormat(Settings, Rights);
{Roles ОбщаяФорма.Roles_ConnectionSettingsForm.Форма(218)}:Roles_ExportAndLoadCurrentRoles.UpdateRoleExt(AddInfo.Settings, CountRoles, Log);
{Roles ОбщаяФорма.Roles_ConnectionSettingsForm.Форма(196)}:SaveFilesAtServer(FileDescription.Address, AddInfo);

при нажатии на кнопку заполнить из текущей базы. не все роли попадают в список ролей. из 780 ролей добавилось только 361. при попытке загрузить роль из базы, 1С зависает и ничего не происходит
платформа 8.3.20.1684 УХ 3.1
38. Hans 3 18.10.22 18:16 Сейчас в теме
{<Неизвестный модуль>(18,49)}: Пропущен символ '"' (двойная кавычка)
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(265)}: Execute("Result = " + Code);
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(161)}: Result = CalculateResult(Code, Query);
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(137)}: CalculateTreeRow(NewRow, Rows);
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(78)}: CalculateResultQuery(RLSParamStructure);

по причине:
{<Неизвестный модуль>(18,49)}: Пропущен символ '"' (двойная кавычка)
И ("Условие" = "" И "Т.ХозяйственнаяОперация В (<<?>>
{<Неизвестный модуль>(18,49)}: Ожидается символ ')'
И ("Условие" = "" И "Т.ХозяйственнаяОперация В (<<?>>
{(7, 6)}: Синтаксическая ошибка
И Не <<?>>СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",Подразделения,"))
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(283)}: Return Query.Execute().Unload()[0].Result;
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(161)}: Result = CalculateResult(Code, Query);
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(137)}: CalculateTreeRow(NewRow, Rows);
{Roles ОбщаяФорма.Roles_ConvertTemplateToQuery.Форма(78)}: CalculateResultQuery(RLSParamStructure);

по причине:
{(7, 6)}: Синтаксическая ошибка
И Не <<?>>СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",Подразделения,"))


Роль рабочая. Отладка РЛС нерабочая.
39. Serg2000mr 670 01.04.23 23:50 Сейчас в теме
(0) Если в строку выгрузки добавить параметр -listFile
... /DumpConfigToFiles "c:\КаталогВыгрузки" -listFile "c:\СписокВыгружаемыхОбъектов.txt"

то будет выгружена не вся база, а только нужные объекты

в файле СписокВыгружаемыхОбъектов.txt например одна строка

Роль.АдминистраторСистемы
40. 1Cynep4eJIoBek 13.05.23 12:03 Сейчас в теме
добрый день, ситуация такая, после обновления с приоритетом новой конфигурации, некоторые шаблоны криво обновились, можно ли с помощью данного расширения это поправить быстро не заходя в конфигуратор
41. melis 97 12.12.23 09:12 Сейчас в теме
Ошибка на конфигурации ERP 2.5.13.109, платформа 8.3.23.1865 - пока нет идей где код такое поле нашел, при поиске такого поля нет:

Поле объекта не обнаружено (ExclusiveModeTerminationAtSessionStart)
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(165)}:NewObject.RightName = Enums.Roles_Rights[ObjectRight.name];
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(264)}:LoadRightsToDB(RightObject, Text);
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(40)}:LoadFromXMLFormat(Settings, Rights);
{Roles ОбщаяФорма.Roles_ConnectionSettingsForm.Форма(140)}:Roles_ExportAndLoadCurrentRoles.UpdateRoleExt(Settings, CountRoles, Log);
{Roles ОбщаяФорма.Roles_ConnectionSettingsForm.Форма(73)}:LoadRolesFromCurrentConfigEnd(Settings);
42. melis 97 12.12.23 13:50 Сейчас в теме
на первой ошибке заглушку поставила (поле вероятно "живет" в таблицах sql с таким именем: В перечислении пытается найти поле - Enums.Roles_Rights не найдено - ExclusiveModeTerminationAtSessionStart)... но теперь (при загрузки из xml) возникла следующая ошибка - число строк табличной части превысило число 99999 строк. Если ролей действительно много в erp 2.5 + нетиповые роли, то место хранения надо менять на регистр сведений.
в справочнике Roles_AccessRoles, в табличной части Rights - оказалось много строк.... Пока всю логику не разобрала еще, но текст ошибки такой:

Ошибка при вызове метода контекста (Записать)
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(271)}:RightObject.Write();
{Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(40)}:LoadFromXMLFormat(Settings, Rights);
{Roles ОбщаяФорма.Roles_ConnectionSettingsForm.Форма(140)}:Roles_ExportAndLoadCurrentRoles.UpdateRoleExt(Settings, CountRoles, Log);
{Roles ОбщаяФорма.Roles_ConnectionSettingsForm.Форма(73)}:LoadRolesFromCurrentConfigEnd(Settings);

по причине:
Табличная часть объекта содержит более 99999 строк - 'Роли доступа.Права'
43. melis 97 12.12.23 14:28 Сейчас в теме
Табличная часть объекта содержит более 99999 строк - 'Роли доступа.Права' - это косяк первой заглушки - надо видимо просто прерывать цикл здесь:
Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(165)}:NewObject.RightName = Enums.Roles_Rights[ObjectRight.name];
44. Eos 07.10.24 11:44 Сейчас в теме
Добрый день! Подскажите пожалуйста, работает ли данное расширение на ERP или ERP УХ? У меня не получилось. Сначала была ошибка Табличная часть объекта содержит более 99999 строк - 'Роли доступа.Права' . Попробовал по совету melis прерывать цикл здесь:
Roles ОбщийМодуль.Roles_ExportAndLoadCurrentRoles.Модуль(165)}:NewObject.RightName = Enums.Roles_Rights[ObjectRight.name];
Загрузка прошла успешно, но информации явно не хватает. Нет RLS в ролях и часть полезных функций не работает.
45. o.nikolaev 216 05.11.24 17:07 Сейчас в теме
Хоть тресни, не понимаю - зачем писать код 1С на английском :(
Оставьте свое сообщение