Ограничение прав на уровне отборов


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

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

 

Итак к сути. У меня в конфигурации используется RLS, все как бы хорошо, но наткнулся на проблемку в отчетах. К примеру у пользователя нету прав к документам, у которых отличное подразделение от его права, естественно право на уровне записей я для документов настроил и все отлично работает, в журналах чужие документы не видны, да и в отчетах вроде тоже, все как бы красиво, пока мои "злобные" пользователи меня не переубедили в противоположном.

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

Думал.... Переписывать RLS. Но как!? Там уже у меня куча групп пользователей и филиалов, да и ролей полно в самой конфигурации и уже все шаблоны прописаны мной и протестированы...

Ура... Вот оно решение, а что если пользователям, которые ограничены к отчетности, строго  в отборе отчетов программно определять их доступ? И если даже пользователь будет сам этот отбор убивать/изменять, чтобы он проставлялся при переформировании вновь. Вот оно... Начал процесс разработки. Конечно же, тут без кода не обойтись, но и надо его максимально минимизировать. Также встал вопрос "свойств и категорий" и это удалось решить...

Архитектура разработки:

  1. В систему добавлен справочник "ХранениеИзмеренийОтчетов":
    Его реквизиты:
    • Наименование - обработка начало выбора добавлен список выбора текущих отчетов конфигурации, для возможности выбора его из списка;
    • СинонимОтчета - собственно это  и есть синоним отчета конфигурации метаданных (проставляется автоматически от изменения наименования);
    Табличная часть:
    • ИмяИзмерения - здесь надо знать точное имя измерения как оно выглядит в построителе;
    • Представление - это для своего удобства;
    • Назначение - Назначение: свойства/категории. Если данное измерение содержит свойства или категории и ограничения пользователя будут через свойства или категории, то имеет смысл здесь определить этот тип.

  2. Также в систему добавлен регистр сведений ОграничениеОтбораКОтчетам. Структуру данного регистра можно посмотреть в конфигурации.

  3. Добавлены общие модули: "НастройкаДополнительныхПрав", "VWG_СтандартныеОтчеты".

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

    А именно в процедурах:

    В процедуру  УстановитьНачальныеНастройки() добавлено:

    //+VWG VWG_СтандартныеОтчеты.УстановитьИспользованиеСвойствИКатегорий(ЭтотОбъект.Метаданные().Имя,УниверсальныйОтчет);
    //-VWG


    И в процедуру СформироватьОтчет(ТабличныйДокумент) добавлено:

    //+VWG
    VWG_СтандартныеОтчеты.ПрименитьОграничениеКИзмерениямОтчета(ЭтотОбъект.Метаданные().Имя,УниверсальныйОтчет);
    //-VWG


Здесь собственно все. Как у меня работает система, показано на скриншотах.

Благодарю за внимание.

 

P.S. Приложенная конфигурация является только примером моих объектов, сама она не запускается. Только для того, чтобы посмотреть как это интегрировать у себя. Для измерений в комментариях были прописаны типы, которые были проставлены в моей конфигурации.

Конфигурационный файл сделан на движке 8.2.10.77.

Файлы обработки:

-