Здравствуйте, уважаемые коллеги. Решил поделится одной наработкой, на звезды и огромное количество плюсов не претендую, только на ваше внимание и минутку определенного времени для оценки такого вида возможности "Ограничения прав".
Итак к сути. У меня в конфигурации используется RLS, все как бы хорошо, но наткнулся на проблемку в отчетах. К примеру у пользователя нету прав к документам, у которых отличное подразделение от его права, естественно право на уровне записей я для документов настроил и все отлично работает, в журналах чужие документы не видны, да и в отчетах вроде тоже, все как бы красиво, пока мои "злобные" пользователи меня не переубедили в противоположном.
Взять, к примеру, регистр накопления "Продажи" - это оборотный регистр, в котором есть измерение "Подразделение", пользователь к нему ограничен и если он попытается сформировать отчет он увидит только свои подразделения и информацию к ним, но вот элементарный обход этой ситуации. Пользователь делает в отчете только одну группировку "ДокументПродажи" и увидит все документы даже не его подразделения. Открытие документа конечно не произойдет, но вот сумма продажи уже есть, а пользователю это полностью запрещено (не скажу по каким причинам, такая безопасность практикуется здесь).
Думал.... Переписывать RLS. Но как!? Там уже у меня куча групп пользователей и филиалов, да и ролей полно в самой конфигурации и уже все шаблоны прописаны мной и протестированы...
Ура... Вот оно решение, а что если пользователям, которые ограничены к отчетности, строго в отборе отчетов программно определять их доступ? И если даже пользователь будет сам этот отбор убивать/изменять, чтобы он проставлялся при переформировании вновь. Вот оно... Начал процесс разработки. Конечно же, тут без кода не обойтись, но и надо его максимально минимизировать. Также встал вопрос "свойств и категорий" и это удалось решить...
Архитектура разработки:
- В систему добавлен справочник "ХранениеИзмеренийОтчетов":
Его реквизиты: - Наименование - обработка начало выбора добавлен список выбора текущих отчетов конфигурации, для возможности выбора его из списка;
- СинонимОтчета - собственно это и есть синоним отчета конфигурации метаданных (проставляется автоматически от изменения наименования);
- ИмяИзмерения - здесь надо знать точное имя измерения как оно выглядит в построителе;
- Представление - это для своего удобства;
- Назначение - Назначение: свойства/категории. Если данное измерение содержит свойства или категории и ограничения пользователя будут через свойства или категории, то имеет смысл здесь определить этот тип.
- Также в систему добавлен регистр сведений ОграничениеОтбораКОтчетам. Структуру данного регистра можно посмотреть в конфигурации.
- Добавлены общие модули: "НастройкаДополнительныхПрав", "VWG_СтандартныеОтчеты".
- Внесены изменения в отчеты конфигурации, с которыми работают пользователи. В конфигурации примером есть отчет "Продажи".
А именно в процедурах:
В процедуру УстановитьНачальныеНастройки() добавлено:
//+VWG VWG_СтандартныеОтчеты.УстановитьИспользованиеСвойствИКатегорий(ЭтотОбъект.Метаданные().Имя,УниверсальныйОтчет);
//-VWG
И в процедуру СформироватьОтчет(ТабличныйДокумент) добавлено:
//+VWG
VWG_СтандартныеОтчеты.ПрименитьОграничениеКИзмерениямОтчета(ЭтотОбъект.Метаданные().Имя,УниверсальныйОтчет);
//-VWG
Здесь собственно все. Как у меня работает система, показано на скриншотах.
Благодарю за внимание.
P.S. Приложенная конфигурация является только примером моих объектов, сама она не запускается. Только для того, чтобы посмотреть как это интегрировать у себя. Для измерений в комментариях были прописаны типы, которые были проставлены в моей конфигурации.
Конфигурационный файл сделан на движке 8.2.10.77.