ОбъектМетаданных: Роль

Типы · MetadataObject: Role

Используется для обращения к метаданным объекта конфигурации - роль.

Полное описание, параметры и ограничения

ОбъектМетаданных: Роль (MetadataObject: Role)

ОбъектМетаданных: Роль (MetadataObject: Role)

Доступен, начиная с версии 8.1.

Свойства:
Имя (Name)
Комментарий (Comment)
ОбъектРасширяемойКонфигурации (ExtendedConfigurationObject)
ПринадлежностьОбъекта (ObjectBelonging)
Синоним (Synonym)
Права (Rights)

Методы:
ЕстьИзмененияРасширениямиКонфигурации (ChangedByConfigurationExtensions)
ПолноеИмя (FullName)
Представление (Presentation)
РасширениеКонфигурации (ConfigurationExtension)
Родитель (Parent)

Описание:

Используется для обращения к метаданным объекта конфигурации - роль.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

См. также:
РолиПользователя, метод Добавить
РолиПользователя, метод Удалить
РолиПользователя, метод Содержит

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Проверить право Чтение текущего пользователя без изменения ролей

Читаем список определений ролей и отдельно проверяем право текущего пользователя на один справочник. Не объявляем это полной проверкой RLS.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.

  2. Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.


Сообщить(СтрШаблон("Определений ролей: %1", Метаданные.Роли.Количество()));
Для Каждого Роль Из Метаданные.Роли Цикл
    Сообщить(СтрШаблон("%1 (%2)", Роль.Имя, Роль.Синоним));
    Сообщить(Роль.Комментарий);
    Сообщить(Роль.Права = Неопределено);
КонецЦикла;
Если Метаданные.Справочники.Количество() = 0 Тогда
    ВызватьИсключение "Нет справочников для учебной проверки права";
КонецЕсли;
ОбъектПроверки = Метаданные.Справочники.Получить(0);
ЕстьЧтение = ПравоДоступа("Чтение", ОбъектПроверки);
Сообщить(СтрШаблон("Текущий пользователь; %1; Чтение: %2", ОбъектПроверки.ПолноеИмя(), ЕстьЧтение));

Разбор по шагам

  1. Коллекция Метаданные.Роли содержит определения всех ролей конфигурации, а не назначенные текущему пользователю роли.

  2. Права у описания роли в доступном API равно Неопределено. Из этого свойства нельзя получить матрицу разрешений.

  3. ПравоДоступа вызываем без третьего параметра: проверяется текущий пользователь, не чужая роль или учётная запись.

  4. Проверка явного пользователя или роли третьим параметром требует административных прав; этот учебный пример её намеренно не делает.

Как проверить результат

  1. Полученное значение ЕстьЧтение имеет тип Булево. Для другого учебного пользователя оно может отличаться.

  2. Сообщения о ролях не интерпретируются как список назначений пользователю.

  3. В примере не создаются пользователи, не устанавливаются роли и не читаются записи справочника.

Ожидаемый результат

Проверено текущее право на объект метаданных с явным отделением от RLS и назначений ролей.

На что обратить внимание

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

  2. Ложь нельзя обходить включением привилегированного режима в учебном примере.

  3. Для полной проверки доступа нужны отдельные тестовые пользователи и проверка конкретных действий в копии базы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Отличить наличие роли от права чтения пользователя

ПолныеПрава существует в метаданных. Это не означает, что роль назначена текущему пользователю; обе проверки выполняются отдельно.

Где и как запускать

Полный серверный модуль изолированной учебной копии КА2 Progress 2.5.20.75; только чтение.

Подготовка

  1. Отдельная учебная копия КА2 Progress 2.5.20.75 из C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS, платформа 8.5.1.1343. Создайте серверный общий модуль УчебныеКонтрактыОбработчиков.

  2. Вставьте полный модуль одного урока и вызовите УчебныеКонтрактыОбработчиков.ВыполнитьПример() из своей учебной серверной команды.

  3. Источники: Roles\ПолныеПрава.xml; EventSubscriptions\АктуализироватьСтруктуруПредприятия.xml; ScheduledJobs\АнализДанныхДляОповещенийКлиентам.xml и соответствующие CommonModules.

  4. Код только читает метаданные и признаки прав. Он не назначает роли, не меняет параметры сеанса, не записывает организацию и не вызывает обработчик подписки или задания.

  5. Учебная копия должна быть изолирована от рабочих фоновых заданий и внешних обменов её обычными средствами администрирования. Этот пример не выключает и не включает задания за пользователя.

  6. Диагностика расширений и доступных прав зависит от активной базы и пользователя. Не подгоняйте права рабочей базы под ожидаемые булевы результаты.

Процедура ВыполнитьПример() Экспорт
    Роль = Метаданные.Роли.Найти("ПолныеПрава");
    Каталог = Метаданные.Справочники.Найти("Номенклатура");
    Если Роль = Неопределено ИЛИ Каталог = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённой роли или справочника";
    КонецЕсли;
    Сообщить(Роль.Имя = "ПолныеПрава");
    Сообщить(Роль.Права = Неопределено);
    РольАктивна = РольДоступна(Роль.Имя);
    ЕстьЧтение = ПравоДоступа("Чтение", Каталог);
    Сообщить(ТипЗнч(РольАктивна) = Тип("Булево"));
    Сообщить(ТипЗнч(ЕстьЧтение) = Тип("Булево"));
    Сообщить("Роль активна у текущего пользователя: " + Строка(РольАктивна));
    Сообщить("Признак права чтения Номенклатура: " + Строка(ЕстьЧтение));
    Сообщить("Это не проверка RLS и не проверка чтения конкретного товара.");
    Сообщить(Роль.Синоним);
    Сообщить(Роль.Комментарий);
    Сообщить(Роль.ПолноеИмя());
    Сообщить(Роль.Представление());
    Сообщить(Роль.ПринадлежностьОбъекта);
    Сообщить(ТипЗнч(Роль.ОбъектРасширяемойКонфигурации));
    Сообщить(Роль.ЕстьИзмененияРасширениямиКонфигурации());
    Сообщить(ТипЗнч(Роль.РасширениеКонфигурации()));
    Сообщить(Роль.Родитель() = Метаданные);

КонецПроцедуры

Разбор по шагам

  1. Найти реальную роль ПолныеПрава и метаданные Номенклатура.

  2. Прочитать Роль.Права: по контракту это всегда Неопределено, не таблица доступов и не неисправность роли.

  3. Через РольДоступна проверить активность этой роли у текущего пользователя. Через ПравоДоступа отдельно получить признак чтения справочника.

  4. Вывести паспорт роли и происхождение расширений. Никаких пользователей, профилей или ролей не менять.

Как проверить результат

  1. Пять фиксированных проверок дают Истина; РольАктивна и ЕстьЧтение выводятся как диагностика и могут быть Ложь.

  2. У пользователя без ПолныеПрава роль всё равно найдётся в метаданных. Это наглядно разделяет описание и фактический доступ.

Ожидаемый результат

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

На что обратить внимание

  1. ПравоДоступа не доказывает доступ к конкретной записи с ограничениями RLS.

  2. Не включайте привилегированный режим ради положительного результата: это изменит смысл проверки.

  3. Синоним Полные права — не имя роли. Для поиска используется ПолныеПрава.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.