Отладка шаблонов ограничения доступа RLS

Если вы не можете разобраться в тексте шаблона ограничений прав доступа RLS — попробуйте воспользоваться этой обработкой!

В дополнение к статической системе разделения прав доступа (на основании ролей) в системе 1С действует вторая система прав доступа — динамическая (RLS). В этой системе права доступа высчитываются динамических способом, в зависимости от заданных параметров, в процессе работы.

Правила распределения прав доступа в системе RLS описываются в шаблонах, которые описываются на языке запросов 1С с использованием специального расширенного синтаксиса. При этом текст шаблона может быть весьма сложным для понимания и отладки.

Мы столкнулись с необходимостью добиться правильной работы шаблона ограничений прав в конфигурации «Бухгалтерия предприятия, редакция 3.0». Проблема заключалась в том, что разделение прав по организациям для штатных ролей конфигурации работало правильно, а для тех ролей, которые добавили мы — не работало вовсе.

Мы попробовали воспользоваться обработкой //infostart.ru/public/264989/ , однако с нашим шаблоном она не справилась — некоторые синтаксические конструкции не поддерживались. В исследуемом шаблоне было:

  • 52 параметра;
  • встроенные предопределённые шаблоны;
  • параметры сеанса;
  • функциональные опции;
  • многочисленные инструкции препроцессора, в том числе вложенные;
  • просто около 3000 строк.

В результате ограничение прав доступа было абсолютно нечитабельно, понять, что именно на рабочей базе было настроено не так, как настроено на тестовой, где всё работало, не удавалось.

Возникла идея написать обработку, которая организует препроцессинг ограничения прав доступа, показывая запрос, который в конце концов применяет 1С. В ограничениях прав доступа могут быть:

  • подстрока ## — для вставки в текст одного символа #;
  • подстрока #ТекущаяТаблица — для вставки в текст псевдонима текущей таблицы;
  • подстрока #ИмяТекущейТаблицы, #CurrentTableName — для вставки в текст полного имени таблицы;
  • подстрока #ИмяТекущегоПраваДоступа, #CurrentAccessRightName — для вставки в текст имени права доступа;
  • подстроки #ЕСЛИ #ИНАЧЕЕСЛИ #ИНАЧЕ #ТОГДА #КОНЕЦЕСЛИ #IF #ELSIF #ELSE #ENDIF — для использования препроцессора;
  • использование сложных условных выражений с операциями И, ИЛИ, НЕ, <, >, <=, >=, =, <> и функции СтрСодержит для использования препроцессора;
  • использование значений параметров сеанса и функциональных опций через синтаксис &Параметр;
  • вызов шаблонов ограничений с передачей неограниченного числа параметров. При этом тексты шаблонов ограничений могут содержать всё от пункта 1) до 7), плюс вызов вложенных шаблонов ограничений и подстрок #Параметр(номер параметра).

Для использования реализованной обработки необходимо:

  • Выгрузить файлы конфигурации. (Конфигуратор -> Главное меню -> Конфигурация -> Выгрузить файлы конфигурации…)
  • Запустить обработку в режиме предприятия.
  • Последовательно указать: Файл прав (Файл сохранённой роли), Объект прав (Полное имя таблицы или реквизита), Имя права (Обычно чтение).
  • Проверить настройки: Имя текущей таблицы, имя текущего права доступа, текущая таблицы. Они должны заполниться автоматически.
  • Нажать кнопку «Выполнить».
  • После выполнения пункта 5) должна заполниться таблица параметров. Если в ограничении прав доступа использовались подстроки &Параметр, то они должны появиться в таблице Параметры.
  • В теории 1С допускает наличие отдельного ограничения доступа для каждого реквизита (поля). Поэтому результат будет показан в виде списка полей. При активации элемента списка автоматически заполняется текстовый документ — результатируещей строкой запроса.
  • Обработка позволяет менять значения параметров и настроек. После этого можно снова нажимать кнопку «Выполнить».

В результате получаем гораздо более читабельный текст, который можно использовать в конструкторе запросов ограничения доступа или, с минимальными довольно очевидными изменениями, его можно выполнить в консоли запросов.

 

46 Comments

  1. hotey

    Обработка только для обычного интерфейса подходит? Или можно и в управляемом запускать?

    Reply
  2. wolfsoft

    Плюс за движения в нужном направлении, ибо отладка RLS со стороны платформы 1С находится в полной … Как, впрочем, и многое другое.

    Reply
  3. VSmirnoff

    (1) hotey, Форму обработки написали для обычного интерфейса. Несложно переделать и под управляемое приложение, но у нас такой необходимости до сих пор не возникло.

    Reply
  4. y-ha

    Добрый день! Не скачивается обработка! Перезалейте пожалуйста!

    Reply
  5. VSmirnoff

    (4) y-ha, Я проверил — файл скачивается…

    Reply
  6. y-ha

    Хм, а теперь нормально скачалось. Но все равно спасибо.

    Reply
  7. bayce

    Интересная вещь

    Reply
  8. kredko

    Добрый день. Обработка не работает.

    При выборе Имя права «Read» выскакиевает ошибка:

    {Форма.ФормаОбычная.Форма(129)}: Итератор для значения не определен

    Для каждого лУсловиеОграничения из лИмяПрава.restrictionByCondition Цикл

    Или «Edit»:

    {Форма.ФормаОбычная.Форма(129)}: Поле объекта не обнаружено (restrictionByCondition)

    Для каждого лУсловиеОграничения из лИмяПрава.restrictionByCondition Цикл

    Пробую на УПП 1.3.48 + БИТ.Финанс. Пользы от этой обработки пока не увидел.

    Reply
  9. VSmirnoff

    (8) kredko, Добрый день!

    На какой платформе запускаете обработку? 8.2? 8.3?

    Пришлите в личку исходный xml-файл, мы попробуем определить причину ошибки.

    Reply
  10. AlX0id
    Конфигуратор -> Главное меню -> Конфигурация -> Выгрузить файлы конфигурации…

    Прям все? Нужно-то наверняка не так много..

    Reply
  11. VSmirnoff

    (10) AlX0id, Дело в том, что в 8.3 (по сравнению с 8.2) команда «Выгрузить файлы конфигурации…» по умолчанию скрыта, её можно вернуть, настроив меню. Мы и сами её нашли только после вашего вопроса :-), хотя в статье «по инерции» упомянули название старой команды (в 8.3 в меню есть команда «Выгрузить конфигурацию в файлы…»).

    Понятно, что воспользовавшись командой «Выгрузить файлы конфигурации…» можно выбрать в дереве и выгрузить в файл только интересующую роль.

    Reply
  12. rustemg

    У меня такая же ошибка.

    {Форма.ФормаОбычная.Форма(129)}: Итератор для значения не определен

    Для каждого лУсловиеОграничения из лИмяПрава.restrictionByCondition Цикл

    Reply
  13. AlX0id

    (11) VSmirnoff,

    Во блин, звезды сошлись ))

    Терь буду знать, что есть таки такая возможность в 8.3 )

    Reply
  14. kudzia1

    (11) VSmirnoff, Кстати да !

    Буквально седня пытался выгрузить и сравнить !

    Спасибо.

    Reply
  15. ReXt0n

    {Форма.ФормаОбычная.Форма(129)}: Поле объекта не обнаружено (restrictionByCondition)

    Для каждого лУсловиеОграничения из лИмяПрава.restrictionByCondition Цикл

    1С:Предприятие 8.2 (8.2.19.80), Управление производственным предприятием, редакция 1.3 (1.3.51.3)

    Reply
  16. VSmirnoff

    (15) ReXt0n, (12) rustemg, мы выполнили дополнительное тестирование, выяснилось, что применённые методы всё-таки работают только на 8.3. Обработка перезалита, теперь при попытке её запуска в конфигурации 8.2 выдаётся сообщение «Данная обработка не поддерживает данную версию 1С Предприятия» и работа завершается. Кроме того, расширена маска для поиска файлов для загрузки. Теперь она выглядит так: «Role.*.Rights.xml;Роль.*.Права.xml».

    Reply
  17. Sergoninfostarru

    Версия 1С:Предприятие 8.3 (8.3.4.465). Открыл обработку и попробовал воспользоваться кнопкой выбора файла прав — дает «Данная обработка не поддерживает данную версию 1С:Предприятия». Режим работы — файловый, обычная прикладная программа. По формам обработки вижу, что это формы для работы в режиме обычной прикладной программы. Пробую записать путь в виде строки, без выбора из каталога, не активизируются следующие реквизиты : «Объект прав, имя права» и т.д. Все другие реквизиты серые и недоступные. Обработку не могу запустить !!!

    Reply
  18. AlexanderKai

    Версия 8.3.5.1098 — пишет, что не поддерживается данная версия.

    Reply
  19. tattoo-freedom

    1С:Предприятие 8.3 (8.3.5.1146) тоже пишет не поддерживается

    Reply
  20. VSmirnoff

    (19) tattoo-freedom, (18) AlexanderKai, (17) Sergoninfostarru

    Подправили обработку, файл перезалил.

    Reply
  21. tattoo-freedom

    Спасибо.

    Reply
  22. Makushimo

    Добрый день.

    Подскажите, что не так.

    На УТ 11,1.9.51

    выгрузил файлы

    запустил обработку

    выбрал файл роли ПартнерСамообслуживания

    Объект ЗаказКлиента

    право Чтение

    Нажал Выполнить

    параметры заполнились

    список полей пуст

    и где обещанный текст запроса, который потом «можно спокойно отлаживать» где-то. ??

    Reply
  23. Makushimo

    Объясните, пожалуйста, как вот это вот работает:

    Процедура ПолеВводаФайлПравНачалоВыбора(пЭлемент, пСтандартнаяОбработка)
    ………….
    лФабрикаXDTO = СоздатьФабрику();
    …………………..
    КонецПроцедуры
    
    Функция СоздатьФабрику()
    
    Возврат ФабёрикаXDTO;
    
    КонецФункции

    Показать

    Переменная ФабёрикаXDTO до Возврат из функции не определена, однако, когда она возвращается из функции, то мистическим образом превращается в объект платформы ФабрикаXDTO.

    КАК ЭТО РАБОТАЕТ?

    а после перезапуска сеанса отладки вообще стало ругаться на эту вот строку

    Возврат ФабёрикаXDTO;

    шайтан какой-то

    Reply
  24. kredko

    Всё работает. Всё хорошо, всё замечательно, но пользы от этой обработки не увидел.

    Reply
  25. m_aster

    Выгрузил набор прав с шаблоном ограничений, автозаполнения параметров не увидел, как дальше двигаться?

    Reply
  26. Mantis

    Скачал…

    1С:Предприятие 8.2 (8.2.19.83) — пишет, что не поддерживается данная версия.

    Функция СоздатьФабрику()

    код функции за комментирован

    убрал комментарий….

    Нажать кнопку «Выполнить».- ничего не происходит…..

    Как вообще выгрузить роли с шаблонами ?

    Reply
  27. DoctorRoza

    Сегодня возникла необходимость разобраться в RLS в ЗУПе. Но у меня 8.2. Автор! Выложите, пожалуйста, обработку под 8.2 отдельно. Спасибо!.

    Reply
  28. cargobird

    Да, для 8.2 выложить было бы неплохо…

    Reply
  29. DoctorL

    Переделайте уже для 8.3 то!

    Reply
  30. kasper076

    Чем от этого отличается?

    Reply
  31. VSmirnoff

    Реализована версия для 8.2 и 8.3

    Reply
  32. pzub

    Помогите, пожалуйста разобраться:

    Пытался разобрать шаблон прав из БСП 2.1

    #ПоНаборамЗначений(«Журнал.Поставщики», «Чтение», «», «Ссылка» )

    Обработка выдала следующие сообщения:



    Встретил невычисляемое условие: лУсловиеПараметры.ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) .

    Встретил невычисляемое условие: лУсловиеПараметры.ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) .

    Встретил невычисляемое условие: лУсловиеПараметры.ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) .

    Встретил невычисляемое условие: НЕ лУсловиеПараметры.ОграничиватьДоступПоВидуПользователи = «»

    И лУсловиеПараметры.ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) .

    Встретил невычисляемое условие: НЕ лУсловиеПараметры.ОграничиватьДоступПоВидуВнешниеПользователи = «»

    И НЕ лУсловиеПараметры.ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка) .

    Встретил неизвестный шаблон ограничения: КОНЕЦЕСЛ.



    Результирующий текст конечно тоже не рабочий.

    Reply
  33. kalyaka

    Выбрал файл прав, Объект прав, Имя прав -> заполнились настройки. После этого нажал кнопку Выполнить -> заполнился список параметров без значений, список полей из одного пустого поля, оригинальный текст.

    Результирующий текст при выборе пустого поля не заполняется.

    Что я делаю не так?

    Reply
  34. Гость

    (31) VSmirnoff,

    Добрый день.

    Скачала обработку, а там только обычная форма. Для управляемого приложения варианта обработки нет?

    Reply
  35. v.l.

    (30) kasper076, тем, что эта публикация написана раньше на 1 месяц.

    Reply
  36. kasper076

    (35) Vladal, не обратил внимания. Пасиб.

    Reply
  37. VSmirnoff

    — В данный момент обработка для управляемого приложения не реализована. Пока на неё нет времени.

    — К сожалению мне не удалось реализовать полностью универсальный код. Например, сложности с текстом вида «Значение(Справочник.ВнешниеПользователи.Пус

    Reply
  38. Чародей

    В служебных сообщениях вышло: «Встретил неизвестный шаблон ограничения: ОБЪЕКТРЕМОНТА» Не работает, 8,2 конфигурация ТОиР.

    Reply
  39. dr2c

    УТ 10.3 поддерживает?

    Reply
  40. dr2c

    (37) УТ 10.3 поддерживает? А то http://infostart.ru/public/390087/ скачал, а нормально она работает только со своим примером…

    Reply
  41. dr2c

    (40)Поддерживает!

    Reply
  42. ser6702

    Возможно корректнее уточнить: Для каких версии БСП и на каких платформах работает обработка?

    Reply
  43. Famza

    Пробовал посмотреть право редактирование роли «Пользователь» объекта «Справочник.Контрагенты» — поля так и остались пустыми. УПП 1.3.96.1, 8.3.11.2867

    Reply
  44. adapter

    (37) Разобрались? Скачал и тоже получил эту ошибку

    Встретил невычисляемое условие: лУсловиеПараметры.ТекущийВнешнийПользователь = Значение(Справочник.ВнешниеПользователи.ПустаяСсылка)

    и

    Встретил неизвестный шаблон ограничения: КОНЕЦЕСЛ
    Reply
  45. check2

    Чувак, низкий поклон тебе… Выручил.

    Reply
  46. Lupeykin

    К сожалению у меня не заработало, Встретил неизвестный шаблон ограничения: КОНЕЦЕСЛ.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *