В процессе работы с конфигурацией 1С:Управление нашей фирмой (УНФ) часто возникает необходимость ограничить видимость структуры подчиненности документов для определенных сотрудников. Это может быть продиктовано требованиями безопасности или желанием упростить интерфейс пользователя, скрыв избыточную информацию. Однако стандартная настройка прав не всегда срабатывает очевидным образом. В этой статье мы разберем, почему права могут сохраняться даже после их отключения, и какими способами можно гарантированно закрыть доступ к связанным документам.
Разберем ситуацию, с которой сталкиваются многие администраторы. В системе существует специализированная роль ПросмотрСвязанныеДокументы (или ПросмотрСвязанныхДокументов в зависимости от версии). Казалось бы, достаточно исключить эту роль из профиля групп доступа пользователя, и кнопка «Связанные документы» исчезнет. Однако на практике кнопка часто остается активной.
Выясним причину такого поведения системы. В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), права на общие команды часто «вшиты» в системные роли, такие как БазовыеПраваУНФ или Удаленный доступ. Это сделано разработчиками 1С для обеспечения базовой работоспособности интерфейса. Поскольку права в 1С работают по принципу суммирования, наличие разрешения хотя бы в одной из назначенных пользователю ролей дает ему доступ к функции. Таким образом, если пользователю назначены базовые права (без которых вход в программу невозможен), он может продолжать видеть структуру подчиненности.
Рассмотрим пошагово стандартный механизм управления правами через пользовательский интерфейс. Этот метод следует попробовать первым, прежде чем переходить к программированию.
Просмотр связанные документы.Важное замечание: проанализируем ситуацию, когда пользователю назначено несколько групп доступа. Если хотя бы в одной из них роль Просмотр связанные документы останется включенной, ограничение не сработает. Проверьте все группы доступа, в которые входит сотрудник, включая общие.
Если манипуляции с ролями не принесли результата из-за «вшитых» прав в базовых ролях, наиболее корректным решением будет использование механизма расширений. Рассмотрим, как программно скрыть доступ к функционалу.
Создадим расширение и добавим в него общую команду СвязанныеДокументы (или аналогичную обработку СтруктураПодчиненности). В расширении мы можем принудительно установить право «Просмотр» в значение «Ложь» для всех ролей, кроме администратора. Однако более надежным методом является программное скрытие элементов формы.
Проанализируем пример кода, который можно разместить в расширении для скрытия кнопки в формах документов:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем, не является ли пользователь администратором
Если Не РольДоступна("ПолныеПрава") Тогда
// Ищем кнопку в командной панели формы
ЭлементСвязанныеДокументы = ЭтаФорма.Команды.Найти("ОбщаяКомандаСвязанныеДокументы");
Если ЭлементСвязанныеДокументы <> Неопределено Тогда
ЭлементСвязанныеДокументы.Видимость = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот метод хорош тем, что он не затрагивает основные метаданные и легко отключается при необходимости.
Выясним, что именно открывается при нажатии на кнопку. В большинстве версий УНФ за это отвечает объект Обработка.СтруктураПодчиненности. Даже если вы скроете кнопку «Связанные документы» из командного интерфейса, опытный пользователь может попытаться вызвать обработку через «Функции для технического специалиста» или по прямой ссылке.
Чтобы полностью исключить эту возможность, выполним следующие действия в расширении:
Обработка.СтруктураПодчиненности.Просмотр и Использование.В этом случае при попытке открыть список связанных документов система выдаст стандартное сообщение: «Нарушение прав доступа».
Разберем вариант, предложенный пользователями на форуме — отключение команды через свойства формы в конфигураторе или через пользовательскую настройку состава команд. В свойствах формы в дереве элементов можно найти командную панель и снять флажок видимости у соответствующей команды.
Минусы этого подхода:
Посмотрим на ситуацию шире. Иногда доступ к связанным документам необходим, но нужно ограничить видимость только определенных типов документов (например, чтобы менеджер видел связанные заказы, но не видел платежные поручения). В этом случае эффективнее использовать механизм RLS (Record Level Security) — ограничение доступа на уровне записей.
Если настроить RLS на чтение определенных видов документов, то в списке «Связанные документы» пользователь увидит либо пустые строки с надписью «Объект не обнаружен», либо эти строки будут полностью скрыты. Это более сложный, но и более гибкий метод защиты конфиденциальной информации.
Важный совет по очистке кэша: после изменения прав доступа в 1С изменения не всегда вступают в силу мгновенно. Это связано с кэшированием программного интерфейса. Рекомендуется выполнить следующие действия:
%AppData%\1C\1Cv8)./ClearCache.Проанализировав все способы, можно сделать вывод: для быстрого и надежного решения задачи в 1С:УНФ версии 1.6 или 3.0 лучше всего комбинировать создание нового профиля (с отключенной ролью Просмотр связанные документы) и небольшое расширение, которое скрывает саму команду из интерфейса документов для не-администраторов.