В процессе администрирования 1С часто возникает задача аудита прав доступа. Особенно это актуально для финансовых блоков, таких как «Касса». В конфигурации «Управление торговлей» редакции 10.3 права распределены по ролям, и простому пользователю или начинающему специалисту бывает трудно сопоставить конкретного человека с его фактическими полномочиями на чтение или изменение документов. Разберем подробно, как решить эту задачу несколькими способами: от визуального анализа в Конфигураторе до автоматизированного скрипта.
Если у вас есть доступ к Конфигуратору, мы можем проанализировать права «в лоб». Для этого нам нужно понимать, что в 1С права назначаются не пользователю напрямую, а через Роли. Пользователь же является обладателем одной или нескольких ролей.
Рассмотрим последовательность действий:
ПриходныйКассовыйОрдер, РасходныйКассовыйОрдер, ДенежныйЧек, ОбъявлениеНаВзносНаличными.ПриходныйКассовыйОрдер) и выберем пункт Дополнительно, затем перейдем на вкладку Права.Чтение, Просмотр, Изменение и Редактирование.Этот метод надежен, но крайне трудозатратен, если в базе 40 и более пользователей. Поэтому перейдем к более технологичным методам.
Для того чтобы не перебирать каждого пользователя вручную, мы можем воспользоваться встроенным языком 1С. Напишем код, который сам проверит права каждого активного пользователя на интересующие нас объекты. Проанализируем пример кода, который выводит список пользователей и их права в окно сообщений.
Для выполнения этого кода нам понадобится создать внешнюю обработку или воспользоваться консолью кода. Рассмотрим структуру этого алгоритма:
Юзеры = ПользователиИнформационнойБазы.ПолучитьПользователей();
КассовыеДокументы = Новый Массив;
КассовыеДокументы.Добавить(Метаданные.Документы.ПриходныйКассовыйОрдер);
КассовыеДокументы.Добавить(Метаданные.Документы.РасходныйКассовыйОрдер);
КассовыеДокументы.Добавить(Метаданные.Документы.ДенежныйЧек);
ПраваДоступа = Новый Массив;
ПраваДоступа.Добавить("Чтение");
ПраваДоступа.Добавить("Просмотр");
ПраваДоступа.Добавить("Изменение");
ПраваДоступа.Добавить("Редактирование");
Для каждого Юзер Из Юзеры Цикл
Для каждого КассовыйДокумент Из КассовыеДокументы Цикл
Для каждого Право Из ПраваДоступа Цикл
Если ПравоДоступа(Право, КассовыйДокумент, Юзер) Тогда
Сообщить("Пользователь: " + Юзер.Имя + " | Документ: " + КассовыйДокумент.Имя + " | Право: " + Право);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Этот скрипт использует функцию ПравоДоступа(), которая проверяет наличие конкретного права у конкретного пользователя ИБ для заданного объекта метаданных. Это самый точный способ узнать реальное положение дел, так как он учитывает совокупность всех ролей, назначенных человеку.
Если вы боитесь напрямую работать с кодом, разберем по шагам, как безопасно запустить этот алгоритм, создав временный инструмент в Конфигураторе:
ПроверкаПравКассы.Процедура... и КонецПроцедуры) вставим наш программный код..epf) на рабочий стол.В нижней части экрана в окне сообщений появится готовый список. Вы сможете скопировать его в Excel для дальнейшего анализа.
В типовой конфигурации «Управление торговлей 10.3» реализован механизм дополнительных прав. Выясним, как посмотреть настройки, не прибегая к программированию. Для этого выполним следующие действия:
Зайдем в меню Сервис — Пользователи — Настройка прав доступа. Здесь мы увидим справочник Профили полномочий пользователей. Как правило, администраторы создают профили (например, «Бухгалтер», «Продавец») и внутри них отмечают необходимые Роли. Проанализируем состав этих профилей. Выбрав профиль, мы можем увидеть список пользователей, которым он назначен. Это более «высокоуровневый» способ, но он может не учитывать индивидуальные настройки прав, сделанные напрямую в списке пользователей.
Проанализируем ситуацию, когда у пользователя есть право на «Чтение», но он все равно не видит документы. В УТ 10.3 часто используется механизм RLS (Record Level Security). Это ограничение доступа к конкретным записям базы данных (например, только по определенной организации или кассе).
Выясним причину возможного отсутствия доступа даже при наличии прав:
Таким образом, для получения полной картины нам необходимо не только проверить общие роли через Метаданные, но и убедиться в отсутствии ограничений по конкретным значениям объектов (кассам или организациям).
Подводя итог, можно сказать, что для быстрого получения списка пользователей с правами на кассу лучше всего подходит программный метод (Способ 2), так как он исключает человеческий фактор при ручном переборе ролей и дает мгновенный результат.