Проверка наличия роли у пользователя

Публикация № 1085518

Администрирование - Информационная безопасность - Роли и права

проверка права роли

Допустим, мы добавили новую роль в конфигурацию. Потом добавили её в профиль группы доступа и назначили соответствующую группу доступа пользователю. Однако, в конфигурациях на основе БСП все известные программные проверки данной роли при включении пользователя в предопределенную группу доступа "Администраторы" не работают. В статье приведено решение данной задачи.

 

Проверка с помощью функции глобального контекста РольДоступна()

Если в программном коде необходимо проверить установлена ли какая-либо роль у текущего пользователя, то можно воспользоваться функцией глобального контекста РольДоступна(<Роль>), которая возвращает значение Истина, если указанная в скобках роль доступна и Ложь, если не доступна. 

Однако, в конфигурациях на основе БСП при включении пользователя в предопределенную группу доступа Администраторы, пользователю назначаются только две роли: Полные права и Администрирование (в этом можно убедиться с помощью Конфигуратора: Администрирование - Пользователи - Пользователь - Прочие). Все остальные роли отключаются вне зависимости от того, включен ли пользователь в какие-либо еще группы доступа. Система считает, что другие роли этому пользователю не нужны. Поэтому функция РольДоступна() возвращает в этом случае Ложь, что не подходит для решения нашей задачи.

 

Проверка с помощью функций БСП

Проверить наличие роли можно также с помощью функций БСП: Пользователи.РолиДоступны() и УправлениеДоступом.ЕстьРоль(). Но данные функции для полноправного пользователя (с ролями Полные права или Администратор системы) вернут всегда Истину независимо от того, назначена ли данная роль пользователю или нет:

 

Можно было пойти по легкому пути, скопировать данные функции и убрать в них проверку на полноправного пользователя, но мы не ищем легких путей это бы нам не помогло, так как функция Пользователи.РолиДоступны() все равно используют функцию глобального контекста РольДоступна(), а функция УправлениеДоступом.ЕстьРоль() слишком громоздка (текст функции около 300 строк при этом текст основного запроса около 200 строк).

Таким образом, все перечисленные известные функции не подходят для решения нашей задачи.

 

Решение

Для решения этой задачи в любой конфигурации на базе БСП я использую свою функцию:

Функция ЕстьРоль(ИмяРоли, Пользователь = Неопределено) Экспорт

	Если Пользователь = Неопределено Тогда
		Пользователь = ПользователиКлиентСервер.ТекущийПользователь();
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	1 
		|ИЗ
		|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
		|		ПО ГруппыДоступаПользователи.Ссылка.Профиль = ПрофилиГруппДоступаРоли.Ссылка
		|ГДЕ
		|	ПрофилиГруппДоступаРоли.Роль.Имя = &Роль
		|	И ГруппыДоступаПользователи.Пользователь = &Пользователь";
	
	Запрос.УстановитьПараметр("Пользователь", Пользователь);
	Запрос.УстановитьПараметр("Роль", ИмяРоли);
	
	УстановитьПривилегированныйРежим(Истина);
	РезультатЗапроса = Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	
	Если РезультатЗапроса.Пустой() Тогда
		Возврат Ложь;		
	Иначе	
		Возврат Истина;		
	КонецЕсли;
	
КонецФункции

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

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. dhurricane 29.06.19 23:18 Сейчас в теме
Признаться, содержание поста я нахожу несколько... странным.

Во-первых, Вы до самого конца почему-то не указывали, что решение подходит лишь для Документооборота. В БСП нет регистра "ПолномочияПользователей", а значит его нет и во-многих других типовых конфигурациях. Кажется, что в подобном случае правильнее было бы указать целевую конфигурацию если уж не в заголовке, то хотя бы в аннотации к посту.

Во-вторых, неожиданный путь решения Вы выбрали. Не подошла Вам стандартная функция "УправлениеДоступом.ЕстьРоль" тем, что она первым делом проверяет, полные права ли у пользователя. Не первым ли делом на ум приходит простейший из путей решения проблемы - скопировать функцию, удалив у нее лишние проверки? Опять же, и привязки к Документообороту в этом случае не было бы.
10. advokat90 16.05.20 18:48 Сейчас в теме
(1) К Документообороту это решение не подходит в текущем его виде, т.к. справочник "ГруппыДоступа" там сейчас не используется.
2. ignat013 29.06.19 23:45 Сейчас в теме
Стандартная РольДоступна чем не удовлетворила?
4. ni_cola 227 03.07.19 15:13 Сейчас в теме
3. V1V 113 30.06.19 14:24 Сейчас в теме
Пользователи.РолиДоступны() может проверять для выбранного пользователя.
5. ni_cola 227 03.07.19 15:13 Сейчас в теме
(3) Для полноправного не может
6. rudnitskij 05.07.19 12:54 Сейчас в теме
То есть, если у пользователя есть роль Полные права, то функция РольДоступна() вернёт Ложь, даже если ему эта роль назначена через профиль доступа. Поэтому эта функция нам не подходит...
А вот хр.... не совсем так. Или может, не во всех конфигурациях.
А может, не на всех версиях платформы. У меня на 1С:Предприятие 8.3 (8.3.13.1644) возвращает ложь или истина в зависимости от наличия доп прав - при том, что у моего юзера полные права
7. dhurricane 05.07.19 13:00 Сейчас в теме
(6) В конфигурациях на основе БСП в штатном режиме при включении пользователя в предопределенную группу доступа "Администратор", пользователю назначаются только 2 роли: ПолныеПрава и Администрирование. Все остальные отключаются вне зависимости от того, включен ли пользователь в какие-либо еще группы доступа. Поэтому-то функция "РольДоступна" возвращает Ложь.

Возможность назначить такому пользователю нужную роль через конфигуратор конечно остается, но в будущем в определенные моменты она вновь может "слететь".
user809597; pvlunegov; CAH9I; +3 Ответить
15. Cyberhawk 124 03.09.20 21:17 Сейчас в теме
(7)
при включении пользователя в предопределенную группу доступа "Администратор", пользователю назначаются только 2 роли: ПолныеПрава и Администрирование. Все остальные отключаются вне зависимости от того, включен ли пользователь в какие-либо еще группы доступа
Не совсем: роль "Интерактивное открытие внешних отчетов и обработок" не отключается.
dhurricane; +1 Ответить
11. bayce 39 15.07.20 20:35 Сейчас в теме
8. korelski 10 05.12.19 08:48 Сейчас в теме
если добавить в свой общий модуль расширения "Функция ЕстьРоль() Экспорт", то система выдаст ошибку, что такая функция уже есть. Поэтому рациональнее использовать свое наименование, что-нибудь на подобии ЕстьРольПользователя( бла бла бла
А так схема рабочая и главное быстродействующая.
Светлый ум; +1 Ответить
9. alex1cm 27 28.04.20 19:04 Сейчас в теме
Эта функция не работает, если пользователь сначала включен в группу пользователей, а потом уже группа пользователей добавлена в профиль пользователя. В этом случае запрос оказывается пустой, как будто у пользователя вообще нет доступных ролей.
16. salikoff 18.10.20 21:51 Сейчас в теме
(9) Совершенно верно, Справочник.ГруппыДоступа.Пользователи имеет составной тип данных, и в качестве значения может иметь тип ГруппыПользователей. Таким образом, для правильной работы запрос должен быть гораздо сложнее того, что представил автор.
12. bayce 39 15.07.20 20:37 Сейчас в теме
Лучше скопировать стандартную функцию УправлениеДоступом.ЕстьРоль() и закомментировать вот эту часть:
//Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда
// Возврат Истина;
//КонецЕсли;
user1456656; +1 Ответить
19. user809597 11.02.21 15:24 Сейчас в теме
(12) Возможно, я изобретаю велосипед, но в ДО 2.1.27.1 Справочник.ГруппыДоступа и РегистрСведений.СоставыГруппПользователей уже неактуальны

Поэтому в скопированной ЕстьРоль надо ещё изменить стандартный запрос на
ВЫБРАТЬ ПЕРВЫЕ 1
ИСТИНА КАК ЗначениеИстина
ИЗ
Справочник.РабочиеГруппы.Состав КАК ГруппыДоступаПользователи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПолномочияПользователей КАК СоставыГруппПользователей
ПО (СоставыГруппПользователей.Владелец = &Пользователь)
И (СоставыГруппПользователей.Владелец = ГруппыДоступаПользователи.Пользователь)
И (НЕ ГруппыДоступаПользователи.Ссылка.ПометкаУдаления)

После этого заработало
20. user809597 12.02.21 09:19 Сейчас в теме
(19) ну то есть, ещё с отбором по роли, конечно, и лучше вот так

ВЫБРАТЬ ПЕРВЫЕ 1
	ИСТИНА КАК ЗначениеИстина
ИЗ
	Справочник.РабочиеГруппы.Состав КАК СоставыГруппПользователей
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПолномочияПользователей КАК ПолномочияПользователей
		ПО (ПолномочияПользователей.Владелец = &Пользователь)
			И (ПолномочияПользователей.Владелец = СоставыГруппПользователей.Пользователь)
			И (НЕ СоставыГруппПользователей.Ссылка.ПометкаУдаления)
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли
		ПО (ПолномочияПользователей.Полномочия = ПрофилиГруппДоступаРоли.Ссылка)
			И (ПрофилиГруппДоступаРоли.Роль.Имя = &Роль)
			И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления)
Показать
13. bayce 39 15.07.20 20:39 Сейчас в теме
БСП вообще странно сделано
14. user1454737 25.08.20 17:03 Сейчас в теме
Всегда пользовался функцией РольДоступна (IsInRole)

Синтаксис:
РольДоступна(<Роль>)

Параметры:
<Роль> (обязательный)
Тип: Строка, ОбъектМетаданных: Роль.
Название роли как она задана в конфигураторе или объект описания метаданного роли.
Возвращаемое значение:
Тип: Булево.
Истина - роль доступна текущему пользователю; Ложь - в противном случае.
Описание:
Определяет доступность указанной роли текущему пользователю.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер).
Примечание:
Если передан неверный тип параметра или указано неверное значение, генерируется исключение.
17. kudim 21.10.20 16:12 Сейчас в теме
Спорна сама ситуация когда пользователю с полными правами нужно что-то ограничивать.
Ограничивать в первую очередь нужно количество пользователей с такими правами.
soci0pat; user809597; kamsky93; user723423; Dmitri93; +5 Ответить
21. user816558 26.02.21 12:19 Сейчас в теме
(17)
17. kudim 21.10.20 16:12
Спорна сама ситуация когда пользователю с полными правами нужно что-то ограничивать.
Ограничивать в первую очередь нужно количество пользователей с такими правами.


А если посмотреть с другой стороны? Не запрещать, а разрешать:)

Доступ к изменению чего либо при наличии какой либо роли, тогда возникает описанная автором топика потребность в доработки функции.
18. kimkarus 10 21.01.21 11:28 Сейчас в теме
Оставьте свое сообщение

См. также

Как убрать/заблокировать давно удаленных пользователей из Системы взаимодействия

Роли и права v8 1cv8.cf Россия Бесплатно (free)

Данная статья будет служить как вспомогательная человеку, столкнувшемуся на своем пути с Системой взаимодействия, и особо особенному человеку, у кого конфигурация 1С:Предприятие 8. Автосервис (1.6.16.153).

22.01.2021    489    user1135816    0    

Доступ на уровне записей в типовых конфигурациях. Настройка доступа пользователей с разделением по подразделениям/складам – практический пример

Роли и права v8 v8::Права 1cv8.cf Бесплатно (free)

Многим известно, что в современных конфигурациях, разработанных с использованием БСП, имеются широкие возможности для настройки прав доступа. В частности, реализован функционал разделения доступа на уровне записей (RLS). Однако администратор(разработчик) при планировании схемы доступа в организации неминуемо столкнется со сложностями, если временами путается в понятиях: Группы пользователей/Группы доступа/Профили групп доступа. В статье представлен принцип решения типичной задачи – ограничения прав пользователя на просмотр/изменение информации «чужих» складов и подразделений в конфигурации 1С: Управление торговлей 11.4.

25.11.2020    1842    Sergey1CSpb    4    

RLS добавление ограничения доступа к данным по произвольному справочнику через штатные механизмы

БСП (Библиотека стандартных подсистем) Информационная безопасность Роли и права v8 КА2 Россия УУ Бесплатно (free)

Решал задачу ограничения доступ к объектам по справочнику "Банковские счета" штатными средствами БСП. Конфигурация КА 2.2. В остальных на БСП должно работать так же. Хотел сделать инструкцию для себя на будущее, решил поделиться.

05.08.2020    2080    ER34    2    

Изменение RLS в ЗУП 3.1 для ограничения доступа к списку сотрудников

Роли и права v8 v8::Права ЗУП3.x Россия Бесплатно (free)

При переезде из УПП в ЗУП 3.1 бизнесом было поставлено условие, система должна ограничивать видимость сотрудников по подразделениям организации. Позиция 1С по этому вопросу однозначна, так делать нельзя. Но с определенными оговорками и условиями можно...

10.07.2020    2623    Zhilyakovdr    0    

Тестируем быстро. Запуск сеанса под другим пользователем за 6 секунд!

Роли и права Пароли v8 v8::Права 1cv8.cf Бесплатно (free)

Как часто вам приходится запускать отладку под другим пользователем? Сколько времени у вас занимает запуск "чужого" сеанса? Убрать (если имеется) у себя аутентификацию ОС, сбросить пароль пользователя и восстановить его потом и т.д. Есть простой и действенный код, который поможет запускать сеансы под другим пользователем без ручной смены параметров аутентификации.

06.05.2020    4536    feva    22    

Права пользователя исключительно на просмотр (чтение) для УТ 11.4

Роли и права v8 v8::Права УТ11 Россия Бесплатно (free)

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

21.11.2019    7995    Aleksandr55555    8    

Типичные ошибки при разработке прав доступа

Роли и права v8 v8::Права Бесплатно (free)

Рассмотрим самые распространенные ошибки в разработке прав доступа.

02.10.2019    21762    YPermitin    57    

Назад в прошлое! Небольшие заметки по администрированию пользователей в УПП

Роли и права v8 УПП1 Бесплатно (free)

Небольшие заметки по функционалу "Администрирование пользователей" конфигурации "Управление производственным предприятием" версии 1.3. Затрагиваются такие темы как: роли, профили доступа, дополнительные права, настройки пользователей и ограничения доступа на уровне записей (RLS).

06.06.2019    14339    YPermitin    18    

Подсистема БСП «Управление доступом», основные объекты и регистры

БСП (Библиотека стандартных подсистем) Роли и права v8 v8::УФ v8::Права 1cv8.cf Бесплатно (free)

Основные принципы работы подсистемы «Управление доступом» из состава БСП. Виды доступа, ограничение доступа на уровне записей. Описание основных объектов и регистров, используемых подсистемой.

23.05.2019    25410    ids79    9    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    46253    ids79    11    

Влияние настройки роли на потребление памяти

Роли и права v8::Права 1cv8.cf Бесплатно (free)

На днях разбирался с проблемой с потреблением памяти процессами конфигуратора и rphost. Как оказалось - причина в настройках ролей. Один поворот не туда, и настройки роли приводят к чрезмерному потреблению оперативки.

29.01.2019    13847    mickey.1cx    15    

Доработка RLS для УНФ

Роли и права v8::Права 1cv8.cf Бесплатно (free)

Инструкция для тех, кто столкнулся с RLS на управляемых формах впервые и не знает, с чего начать.

14.05.2018    17165    FesenkoA    10    

Управление доступом: роли, права, профили, группы доступа, функциональные опции, RLS

Роли и права v8::Права Бесплатно (free)

В 1С достаточно много механизмов, отвечающих за доступ к данным. Группы доступа, профили групп доступа, роли, права доступа, функциональные опции, RLS. Иногда сложно сразу понять, зачем все это нужно, как эти элементы друг с другом связаны и как ими пользоваться.

11.10.2017    102903    ekaruk    16    

Использование подсистемы "Управление доступом" из состава БСП версии 2.2+

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 1cv8.cf Бесплатно (free)

В статье описана последовательность манипуляций с подсистемой "Управление доступом" из библиотеки стандартных подсистем "1С" (БСП), результатом которых является реализация возможности настройки ограничения доступа к данным на уровне записей таблиц базы данных (RLS), применяя в качестве разграничителя доступа (критерия ограничения) любой из справочников конфигурации. Данная статья полезна для разработчиков, которые имеют дело либо с одной из типовых конфигураций "1С" (таких как "Бухгалтерия предприятие 3.0" или "Управление торговлей 11"), либо собираются внедрять (или дорабатывать) указанную выше подсистему в какую-либо другую конфигурацию.

18.11.2014    71480    Bassgood    84    

Распределение ролей пользователей к информационной базе для проверки аудиторами в типовых конфигурациях БП, ЗУП, ЗКБУ и БГУ.

Роли и права v8 1cv8.cf Россия Бесплатно (free)

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

13.05.2014    27644    OV_GCompany    5    

УТ 10.3 Контролируем остатки автоматически

Учет ТМЦ Роли и права v8 УТ10 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

Один из менеджеров довольно крупной торговой конторы стройматериалов озадачил сделать ему так, чтобы "Торговля" сама предупреждала его о минимальном остатке товара на складах, так как "я сам постоянно забываю смотреть отчеты по точкам заказам и остаткам товаров, много организационной работы". Раньше немного занимался Delphi для души и немного для работы, сейчас же больше полугода работаю с 1С, и первое, что мне пришло в голову это Таймер на главной форме с запросом проверяющем остатки и выдающим предупреждение.

25.10.2012    18310    aleksxx    5    

Простое сравнение ролей 1С 8 (сравнение обработок, правил обмена XML, файлов txt, файлов mxl)

Роли и права v8 1cv8.cf Россия Бесплатно (free)

Порядок простых действий для казалось бы сложной операции по сравнению ролей в 1С8. Также можно сравнивать: - правила обмена данными XML - модули объектов в файлах txt - внешние обработки и отчеты - файлы формата mxl

18.08.2010    42262    sapervodichka    20