Для ответа на эти вопросы сначала использовал конфигуратор и форму “Все роли”. Находишь там нужный объект и скролишь по табличке вправо.
Но времени отнимает немало. Особенно, если объектов таких больше одного. Когда проблема встала остро родился запрос:
ВЫБРАТЬ
спрПрофилиГруппДоступа.Ссылка КАК Профиль,
регПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных,
регПраваРолей.Роль КАК Роль,
регПраваРолей.Изменение КАК Изменение,
регПраваРолей.Добавление КАК Добавление,
регПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
регПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
регПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
регПраваРолей.Просмотр КАК Просмотр,
регПраваРолей.Редактирование КАК Редактирование,
регПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление
ИЗ
РегистрСведений.ПраваРолей КАК регПраваРолей
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК спрПрофилиГруппДоступа
ПО (регПраваРолей.Роль = спрПрофилиГруппДоступа.Роль)
ГДЕ
регПраваРолей.ОбъектМетаданных В (&справочники)
И регПраваРолей.Изменение = ИСТИНА
Заполняем в параметре запроса таблицу значений с анализируемыми объектами и получаем перечень ролей и профилей, в которых разрешено их изменение:
Следующий запрос ответит на вопрос кто из пользователей имеет права на редактирование объектов из списка:
ВЫБРАТЬ
спрРолиПрофиляГруппыДоступа.Ссылка КАК Профиль,
регПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных,
регПраваРолей.Роль КАК Роль,
регПраваРолей.Изменение КАК Изменение,
регПраваРолей.Добавление КАК Добавление,
регПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
регПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
регПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
регПраваРолей.Просмотр КАК Просмотр,
регПраваРолей.Редактирование КАК Редактирование,
регПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление
ПОМЕСТИТЬ втПрофилиСПравамиНаИзменение
ИЗ
РегистрСведений.ПраваРолей КАК регПраваРолей
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК спрРолиПрофиляГруппыДоступа
ПО регПраваРолей.Роль = спрРолиПрофиляГруппыДоступа.Роль
ГДЕ
регПраваРолей.Изменение = ИСТИНА
И регПраваРолей.ОбъектМетаданных В(&справочники)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
спрПользователиГруппДоступа.Пользователь КАК Пользователь,
вт.Профиль КАК Профиль,
вт.ОбъектМетаданных КАК ОбъектМетаданных,
вт.Роль КАК Роль,
вт.Изменение КАК Изменение,
вт.Добавление КАК Добавление,
вт.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
вт.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
вт.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
вт.Просмотр КАК Просмотр,
вт.Редактирование КАК Редактирование,
вт.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление
ИЗ
втПрофилиСПравамиНаИзменение КАК вт
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК спрПользователиГруппДоступа
ПО (спрПользователиГруппДоступа.Ссылка.Профиль = вт.Профиль)
ГДЕ
НЕ спрПользователиГруппДоступа.Пользователь ЕСТЬ NULL
УПОРЯДОЧИТЬ ПО
вт.Профиль,
спрПользователиГруппДоступа.Пользователь
В результате нам доступен список пользователей, имеющих право редактировать объекты из списка:
Но если просто отключить роль в профиле, может возникнуть ситуация, когда нужно прочитать данные из проверяемого объекта. И эти права нужно сохранить. Тогда запрос был модифицирован в третий раз:
ВЫБРАТЬ
регПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных,
регПраваРолей.Роль КАК Роль,
регПраваРолей.Изменение КАК Изменение,
регПраваРолей.Добавление КАК Добавление,
регПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
регПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
регПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
регПраваРолей.Просмотр КАК Просмотр,
регПраваРолей.Редактирование КАК Редактирование,
регПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление
ПОМЕСТИТЬ втПраваНаЧтение
ИЗ
РегистрСведений.ПраваРолей КАК регПраваРолей
ГДЕ
регПраваРолей.Просмотр = ИСТИНА
И регПраваРолей.ОбъектМетаданных В(&справочники)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
спрРолиПрофиляГруппыДоступа.Ссылка КАК Профиль,
регПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных,
регПраваРолей.Роль КАК Роль,
регПраваРолей.Изменение КАК Изменение,
регПраваРолей.Добавление КАК Добавление,
регПраваРолей.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
регПраваРолей.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
регПраваРолей.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
регПраваРолей.Просмотр КАК Просмотр,
регПраваРолей.Редактирование КАК Редактирование,
регПраваРолей.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление
ПОМЕСТИТЬ втПрофилиСПравамиНаИзменение
ИЗ
РегистрСведений.ПраваРолей КАК регПраваРолей
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК спрРолиПрофиляГруппыДоступа
ПО регПраваРолей.Роль = спрРолиПрофиляГруппыДоступа.Роль
ГДЕ
регПраваРолей.Изменение = ИСТИНА
И регПраваРолей.ОбъектМетаданных В(&справочники)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
спрПользователиГруппДоступа.Пользователь КАК Пользователь,
вт.Профиль КАК Профиль,
вт.ОбъектМетаданных КАК ОбъектМетаданных,
вт.Роль КАК Роль,
вт.Изменение КАК Изменение,
вт.Добавление КАК Добавление,
вт.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
вт.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
вт.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
вт.Просмотр КАК Просмотр,
вт.Редактирование КАК Редактирование,
вт.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление
ИЗ
втПрофилиСПравамиНаИзменение КАК вт
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК спрПользователиГруппДоступа
ПО (спрПользователиГруппДоступа.Ссылка.Профиль = вт.Профиль)
ГДЕ
НЕ спрПользователиГруппДоступа.Пользователь ЕСТЬ NULL
УПОРЯДОЧИТЬ ПО
вт.Профиль,
спрПользователиГруппДоступа.Пользователь
И если сформировать его в консоли с выводом временных таблиц, то из временной таблицы втПраваНаЧтение можно подобрать замену для отключаемой роли, дающей слишком много прав.
Для тех же, кто не дружит с консолью, приложил два отчета:
-
Для списка объектов метаданных выведет перечень ролей и доступных прав
-
Сформирует список пользователей, которым доступно изменение объектов из списка.
А вообще интересно не изобретал ли я очередной велосипед? Подскажите пожалуйста более удобные способы решения подобных задач в ЕРП.
Отчеты для конфигурации 1С:ERP 2.4.11, тестировалось на платформе 8.3.15.1700.