Всем привет!
Началось все с того, что мне поставили примерно такую задачу: "нужно задать права пользователю, чтобы вот этот документ мог проводить, а вот этот не мог, ну и с отчетами аналогично..."
Началось с простого - а закончил созданием расширенной обработки для анализа прав и ролей, и поиска подходящего профиля групп доступа или набора профилей, в которые необходимо включить пользователя.
Если подходящий профиль не найден и нельзя использовать набор подходящих профилей, тогда надо создать свой профиль с нужными ролями. Обработка не умеет создавать роли и профили. Обработка проводит анализ и поиск подходящих профилей из имеющихся!
Представлена внешняя обработка-стенд - со всеми видимыми служебными таблицами и деревьями - для того, чтобы можно было легко увидеть:
1) есть ли пересечения между ролями,
2) все объединения ролей (всевозможные наборы ролей),
3) есть ли пересечения между профилями групп доступа,
4) все объединения профилей (всевозможные наборы профилей).
Обработка была протестирована на УНФ 1.6, БП 3.0, Розница 2.3, УТ 11, КА 2.4, ЗУП 3.1.
Разработана на платформе 1С:Предприятие 8.3.18.1289, файловый режим: используются функции СтрРазделить(), СтрСоединить(), СтрНайти().
Заложены ограничения - имена объектов метаданных конфигурации и имена ролей имеют длину не более 255 символов. Код открыт - ограничения можно изменить.
Заложены алгоритмические ограничения:
1) подразумевается, что в конфигурации имеется справочник "ПрофилиГруппДоступа", содержащий табличную часть связанных ролей "Роли",
2) профиль определяется по наименованию - поэтому, если у вас два профиля с одинаковым наименованием, значит анализ и поиск профиля отработает с ошибкой (проверка на дублирование наименований профилей будет запрограммирована в след. версиях),
3) перед стартом проверьте символ-разделитель - к примеру в УТ 11, КА 2.4, УНФ 1.6 имеются профили, содержащие в наименовании запятую (символ ",") - для подобных случаев нужно задать другой символ-разделитель, например точку с запятой (";"). Это нужно для того, что собрать набор профилей "Кассир, Кладовщик" в одну строку для последующего разбора и генерации деревьев. Так вот, запятая в наименовании придаст алгоритму другое разделение на подстроки, и обработка отработает некорректно. Символ-разделитель относится только к наборам профилей, но не к ролям - поскольку роли не могут содержать запятые в своем имени.
Перед стартом укажите какие Типы объектов конфигурации хотите включить в анализ: Документы, Справочники, Отчеты и т.д. Разделение на типы объектов уменьшает время анализа.
В обработке имеется один явный недочет - при изменении данных одной строки, обрабатываются все строки таблицы. Технически такой недочет не меняет логику работы программы, но лишь повторно проводит анализ ролей.
Я не тестировал обработку на анализ ролей из расширений и специфичных прав конфигурации: например "Интерактивное открытие внешних обработок".
Предопределенные права на справочники, документы, отчеты, регистры - задействованы и протестированы!
Анализ таблиц (прав и ролей) надо проводить сверху - вниз и слева-направо: каждая верхняя таблица порождает таблицы ниже. Итоговая таблица с наборами профилей может содержать строки выделенные красным цветом - это наборы, в которых имеются профили, которые следует исключить из рассмотрения. К примеру, вы указали в первой верхней таблице, что определенный документ пользователь не должен проводить. Согласно такому критерию будет найдена Роль, которая имеет право проводить данный документ. Эта Роль и соответствующие ей Профили (набор профилей) войдут в таблицу Исключений. Исключения выделяются красным.
В дополнение посмотрите видео, в котором я рассказываю и показываю, как работать с обработкой.
Добавил обработку-стенд для обычных форм. Обработку стоит переименовать в "Анализ прав и ролей - поиск подходящей роли":
1) убрал алгоритм по Профилям - в конфигурациях на обычных формах нет такого справочника. Остался анализ ролей.
2) изменил функции СтрНайти(), СтрСоединить(), СтрРазделить(), да и интерфейсные функции изменил.
Смотрите видео (для обычных форм) без звука - создал тестовый пример, быстро показываю результат работы обработки-стенда. Обратите внимание, если найдены пересечения ролей, то использовать объединения ролей уже не нужно для того, чтобы предоставить пользователю права на набор объектов метаданных из первой таблицы.
Добавил заполнение ролей служебного объекта "по пользователю" - при выборе пользователя в список ролей добавляются роли пользователя, при этом предыдущий список не очищается.
Удобно использовать в тех случаях, когда надо найти "какую еще роль добавить пользователю, кроме тех, что у него уже есть" - при этом надо использовать служебный объект, заполнение ролей "по пользователю" и выставить в "Искл." данные роли.
Замечено, что для N-кол-ва объектов метаданных с M-кол-вом ролей для построения дерева всевозможных вариантов объединения ролей требуется М в степени N раз обойти последовательно все варианты. Для примера, если у вас выбрано 8 объектов метаданных и по каждому в наборе имеется 8 ролей, то для построения дерева ролей потребуется обойти дерево 8 в степени 8 = 16 777 216 раз...
Поэтому для решения задачи или используйте взаимоисключающие критерии, или используйте небольшое кол-во объектов метаданных для анализа (до 5 (в примере это 5 в степени 8 = 390 625 - достаточно быстро обходится)), или оптимизируйте алгоритм построения дерева.
Оптимизация построения дерева будет проведена в следующих версиях как только будет ясен способ оптимизации.
Подписывайтесь на ответы к публикации (в комментариях) - буду держать вас в курсе изменений.
Не забывайте, что в течение 30 дней вы можете повторно скачать файл бесплатно: ссылка на правила скачиваний файловИнфостарт
Всем добра!
С пользой для клиентов, RustIG
1) Подбор товаров по характеристикам (свойствам и значениям)
4) Ввод показателей план-факта через табличный документ
5) Доработка конфигурации Конвертация Данных (вер. 2.1.8.2)
6) Поиск ссылок на любой справочник в документах на УФ
7) Поиск сотрудника и поиск физлица в документах ЗУП
8) Поиск контрагента в документах для управляемых форм
9) Поиск номенклатуры в документах
11) УТ 11.4. Счет на оплату с факсимиле
12) УНФ. Список заказов + Структура подчиненности
13) Удаление справочников для любых баз на управляемых и обычных формах
14) Неиндексированные измерения регистров сведений. В помощь 1С:Эксперту
15) Удаление документов для любых баз на управляемых формах
16) Удаление чеков ККМ в Рознице 2.2
Из последнего опубликованного: