Предпросмотр прав роли до её создания: матрица доступа по метаданным
Администрирование - Роли и права
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Программисту и администратору 1С: как увидеть права роли таблицей до правки конфигурации. Платформа даёт для этого два метода, ПравоДоступа и ПараметрыДоступа, а свойство Роль.Права всегда возвращает Неопределено - прочитать права из метаданных роли нельзя. В архиве модуль матрицы, пример списка объектов и чек-лист; код сверен со справкой 8.3.27.2130 и на платформе не прогонялся.
- Права роли читаются методами ПравоДоступа и ПараметрыДоступа: у свойства Роль.Права документирован тип Неопределено.
- Третий параметр принимает роль или пользователя: с ролью метод возвращает право так, как оно определено в конфигурации.
- Ограничение условием смотрят после свойства Доступность: если права нет, ОграничениеУсловием тоже приходит Истина.
- Список объектов держат отдельным файлом: по нему согласуют объём прав, им же проверяют роль после настройки.
- В привилегированном режиме метод всегда возвращает Истина, поэтому матрицу под ним не проверяют.
Предпросмотр прав - это таблица «объект × роль», собранная двумя штатными методами. Она заменяет переписку с заказчиком о правах и повторный обход роли глазами в конфигураторе.
Для кого: программисты 1С и администраторы, которые ведут роли и профили доступа, а также те, кто согласовывает объём прав с заказчиком.
Права роли читаются не из самой роли. В метаданных у роли нет свойства со списком прав: Роль.Права документировано как тип Неопределено и всегда его возвращает, потому что работа со значением этого свойства во встроенном языке не предусмотрена. Справка платформы отправляет за правами к двум методам глобального контекста - ПравоДоступа и ПараметрыДоступа. Ими и собирается предпросмотр: роль можно описать таблицей до того, как она появится в конфигурации, а после создания - той же таблицей проверить.
📦 Что даёт платформа
ПравоДоступа(<Право>, <ОбъектМетаданных>, <Пользователь/Роль>, <СтандартныйРеквизит>)возвращаетБулево: установлено право на объект или нет. Результат учитывает права на родительский объект и значение свойства «Независимые права подчинённых объектов» для роли.- Третий параметр принимает пользователя информационной базы или объект метаданных роли. При явно указанной роли метод возвращает право так, как оно определено в конфигурации, - это и нужно для предпросмотра.
ПараметрыДоступа(<НаименованиеПрава>, <ОбъектМетаданных>, <СписокПолей>, <Пользователь/Роль>)возвращает объект с двумя свойствами:Доступность(право есть или нет) иОграничениеУсловием(задано ли ограничение доступа условием).Метаданные.НайтиПоПолномуИмени(<ПолноеИмя>)находит объект по строке видаСправочник.Номенклатура, аМетаданные.Ролиперебирает роли конфигурации. У роли доступныИмя,СинонимиПолноеИмя.
Встроенной матрицы прав у платформы нет: в конфигураторе права видны в редакторе роли, а во встроенном языке их выдают два метода выше.
🧱 Матрица «объект × роль»
Строки таблицы - объекты из списка, колонки - роли конфигурации. Список объектов удобно держать в файле: его же согласуют с заказчиком.
На выходе таблица значений: колонка Объект и по колонке на каждую роль. Дальше её видно в форме обработки, можно выгрузить в табличный документ и отдать на согласование. Право задаётся строкой: "Чтение", "Добавление", "Изменение", "Удаление", "Проведение", "ИнтерактивноеДобавление" - полный список значений приведён в справке к методу ПравоДоступа.
Матрица перебирает все роли конфигурации. На большой конфигурации с десятками ролей таблица получается широкой, поэтому для согласования с заказчиком в неё включают три-четыре роли.
🧪 Ограничения условием
Доступность из ПараметрыДоступа отвечает на вопрос «право есть», а ОграничениеУсловием - «сужено ли это право условием на строки». Второе свойство и есть то, что в типовых конфигурациях называют RLS.
Здесь есть место, где ошибаются: если права на действие у роли нет, ОграничениеУсловием всё равно возвращает Истина. Поэтому проверку начинают со свойства Доступность, и только потом смотрят на ограничение. Список полей в третьем параметре обязателен и задаётся строкой через запятую; имена табличных частей указывают как Товары.Сумма.
Типы объектов у ПараметрыДоступа ограничены: справочники, документы, журналы документов, регистры всех видов, планы, бизнес-процессы, задачи, последовательности, внешние источники данных. Для общих модулей, форм и констант метод не применяется.
🧭 Проверка до создания роли
Порядок, при котором объём прав согласуется до правки конфигурации:
- Список объектов выгружается в файл: полное имя, комментарий, нужное право. Его подписывает заказчик.
- Матрица строится по этому списку для роли-образца, у которой права уже настроены.
- Разница между «что нужно» и «что есть у образца» обсуждается по таблице; редактор роли для этого разговора не нужен.
- Роль создаётся в конфигурации, после чего матрица прогоняется ещё раз - теперь уже по новой роли. Расхождение означает, что при настройке роли что-то пропустили.
Шаг 4 - здесь и вскрываются ошибки: до создания роли метод отвечает по правилам конфигурации, но самой роли там ещё нет, и проверить нужно то, что получилось после ручной настройки в конфигураторе.
🪤 Ловушки
Роль.ПрававозвращаетНеопределеновсегда. Прочитать права из объекта метаданных роли нельзя, и код видаДля Каждого Право Из Роль.Права Циклне выполнится.- В привилегированном режиме
ПравоДоступавозвращаетИстинанезависимо от настроек роли. Проверять матрицу подУстановитьПривилегированныйРежим(Истина)бессмысленно. - Права на подчинённые объекты зависят от свойства «Независимые права подчинённых объектов» для роли, поэтому по одному объекту вывода о всей ветке метаданных не сделать.
- Имя объекта из файла может не найтись в конфигурации:
НайтиПоПолномуИменивернётНеопределено, и такую строку нужно помечать отдельно. - Ограничение условием проверяется по списку полей: один и тот же объект даст разные ответы для разных полей.
🚧 Границы
- Метод
ПравоДоступатребует административных прав, если третий параметр указан явно. Обработку с матрицей запускают под пользователем с полными правами - и это отдельный разговор с заказчиком: инструмент согласования ролей не должен быть доступен всем. - Проверка доступна на сервере, толстом клиенте и во внешнем соединении. Тонкий клиент и мобильный клиент метод не поддерживают, поэтому обработку делают серверной.
- Матрица показывает права роли в целом. Права конкретного пользователя складываются из его ролей и профилей доступа: чтобы увидеть их, третий параметр задают пользователем.
- Таблица не заменяет редактор роли: она отвечает на вопрос «есть или нет» по списку объектов, а состав объектов в роли и признаки вроде «Независимые права подчинённых объектов» всё равно правятся в конфигураторе.
📋 Порядок работы
- Составьте файл со списком объектов: полное имя и право, которое для него требуется.
- Возьмите модуль из архива, вставьте в общий модуль с признаком «Сервер» или в модуль серверной обработки.
- Прогоните матрицу по роли-образцу и сравните её с файлом: расхождения - это и есть объём работы по роли.
- Создайте роль и настройте права в конфигураторе.
- Прогоните матрицу по новой роли. Строки, где право не встало, разбирайте поимённо.
- Сохраните итоговую таблицу в файл и приложите к описанию прав для заказчика: при следующем обновлении конфигурации её будет с чем сравнить.
📚 Источники
- Синтакс-помощник платформы 1С:Предприятие 8.3.27.2130, файл справки
shcntx_ru.hbk:Глобальный контекст.ПравоДоступа(с версии 8.0),Глобальный контекст.ПараметрыДоступа(с версии 8.0),ПараметрыДоступа.Доступность,ПараметрыДоступа.ОграничениеУсловием,ОбъектМетаданных: Роль.Права,ОбъектМетаданных: Роль.Имя,ОбъектМетаданных: Роль.ПолноеИмя,ОбъектМетаданныхКонфигурация.Роли,ОбъектМетаданныхКонфигурация.НайтиПоПолномуИмени,ТаблицаЗначений.Колонки,КоллекцияКолонокТаблицыЗначений.Добавить,СтрРазделить,ЗаписьТекста(конструктор «По имени файла»,КодировкаТекста.UTF8). - Ограничения доступа на уровне строк (RLS) и профили доступа - раздел «Права доступа» в документации платформы на its.1c.ru (доступ по подписке ИТС).
📎 Файл к статье
Во вложении архив к статье: модуль матрицы прав, пример списка объектов, чек-лист перед настройкой роли и описание к ним.
matrica-prav.bsl: модуль целиком - матрица «объект × роль», чтение списка объектов из файла, проверка ограничения по полю, выгрузка матрицы в текст и запись в файл;spisok-obektov.csv: пример списка объектов с колонками «требуемое право» и «комментарий», имена условные;chek-list-roli.md: чек-лист перед созданием роли - что согласовать, что проверить после настройки, что приложить к описанию прав;README.md: что проверено, как подключить модуль и что осталось непроверенным.
Файл модуля не привязан к конкретной конфигурации: он обращается только к метаданным и к переданному списку объектов, объектов базы не читает.
🏁 Итог
Права роли читаются методами ПравоДоступа и ПараметрыДоступа: у свойства Роль.Права документирован тип Неопределено, и это первое, о что спотыкаются при попытке написать свою матрицу. Собранная по списку объектов таблица даёт согласуемый документ до правки конфигурации и проверку после ручной настройки роли. Код из архива сверен со справкой платформы 8.3.27.2130 и на платформе не прогонялся: первый запуск делайте на копии базы под пользователем с полными правами. Расскажите в комментариях, чем вы сверяете права роли до её создания и что из этого прижилось.
Вступайте в нашу телеграмм-группу Инфостарт