ПолныеПрава + ДобавленнаяРоль = ПолныеПрава

09.06.23

Администрирование - Роли и права

Проблема - при добавлении какой-либо своей добавленной Роли пользователю с полными правами, конфигурации на основе БСП самостоятельно удаляют эти добавленные роли. Есть решение - как с этим бороться и что делать.

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

Как с этим бороться. 

Ищем общий модуль УправлениеДоступомСлужебный, в нем  процедуру ОбновитьРолиПользователей, захватываем ее в расширение с Контролем, ищем в ней строку:

ДополнительныеРолиАдминистратора.Вставить("ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок", Истина);

и добавляем  свои 3 строчки 

#Вставка
ДополнительныеРолиАдминистратора.Вставить("ИМЯ_своей_роли", Истина);
#КонецВставки

И теперь конфигурация не будет прибивать у пользователя с Полными правами нашу добавленную роль.

Полные права исчезает роль

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159652    875    399    

862

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

16800 руб.

06.12.2023    8871    42    5    

74

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8500 руб.

10.11.2023    10460    36    25    

61

SALE! 20%

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 4752 руб.

27.05.2021    37604    264    92    

205

Роли и права Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

19200 руб.

29.11.2019    25660    17    8    

37

Логистика, склад и ТМЦ Роли и права Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

4560 руб.

21.05.2019    1694782    570    194    

137

Ценообразование, анализ цен Роли и права Системный администратор Платформа 1С v8.3 Управление правами 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С УНФ. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

3000 руб.

23.02.2018    58474    160    261    

152
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1747 09.06.23 18:13 Сейчас в теме
вроде бы роль надо добавлять через профили доступа
2. Alxby 1113 09.06.23 20:40 Сейчас в теме
При использовании БСП правильнее все-таки делать не так. Надо в коде проверять не только доступность этой роли, но еще и доступность ПолныеПрава. А еще лучше использовать Пользователи.РолиДоступны() - там автоматически проверяется полноправность пользователя, и, в придачу, привилегированный режим.
Рамзес; itmind; ovasiliev; +3 Ответить
3. ixijixi 1913 09.06.23 21:33 Сейчас в теме
самостоятельно удаляют эти добавленные роли
И правильно удаляют, тамушта надо создать дополнительный профиль и уже туда добавлять свои роли. И в конфигураторе с ролями ничего не надо делать, только через интерфейс БСП.
improg; 0x00; +2 Ответить
4. Alxby 1113 09.06.23 22:00 Сейчас в теме
(3)Видимо автор имеет в виду, что при добавлении в новый дополнительный профиль роли "ПолныеПрава" и какой-нибудь другой роли, эта самая другая роль пропадает, остается только "ПолныеПрава". И это с точки зрения БСП абсолютно правильно - ПолныеПрава на то и полные, остальные не нужны.
5. Alxby 1113 09.06.23 22:03 Сейчас в теме
(4)Аналогично, если у пользователя УЖЕ есть полные права в основном профиле, то новая роль из другого профиля не добавится.
7. triviumfan 97 09.06.23 22:31 Сейчас в теме
(4) Видимо у него специфические роли, которые требуется добавить к Полным. Разработчик так решил, ему виднее.
unknown181538; +1 Ответить
6. triviumfan 97 09.06.23 22:18 Сейчас в теме
(3)
амушта надо создать дополнительный профиль и уже туда добавлять свои роли

очевидно, что у него дополнительная группа доступа и профиль, т.к.в типовой он и не сможет добавить ничего, ибо он заблокирован от изменений.
unknown181538; +1 Ответить
8. ixijixi 1913 11.06.23 00:45 Сейчас в теме
(6) Неочевидно. Автор пишет о конфигураторе, там по идее можно что хочешь куда хочешь добавить.
9. VPanin56 549 13.06.23 15:50 Сейчас в теме
Ну или я коряво описал или половина комментаторов не поняли происходящего и возникающей проблемы.

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

Через какое-то время или после некоторых манипуляций с Пользователями и правами наша доработка перестает работать.

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

БСП очищает все добавленные роли у Полноправных пользователей.
А суть в том что добавленная Спец роль должна работать независимо от наличия Полных прав.
(8)
vano-ekt; unknown181538; Student1C; iLonmaks; AlbertZ; +5 Ответить
10. dhurricane 13.06.23 17:27 Сейчас в теме
(9) Хорошо, что Вы наконец описали реальную проблему. Плохо, что Вы не нашли корректное решение ее. На самом деле:
1. В дополнение к профилю "Администратор" добавлять свои профили не нужно.
2. Наличие роли следует проверять методом "Пользователи.РолиДоступны(...)"
https://its.1c.ru/db/v8std#content:737:hdoc
11. VPanin56 549 14.06.23 07:36 Сейчас в теме
(10) спасибо за наводку, посмотрю
12. VPanin56 549 14.06.23 07:48 Сейчас в теме
(10) посмотрел, на ИТСе красиво расписали, а по факту в конфигурации шляпа полная.

// Возвращает доступность хотя бы одной из указанных ролей или полноправность
// пользователя (текущего или указанного).
//
// Параметры:
//  ИменаРолей   - Строка - имена ролей, разделенные запятыми, доступность которых проверяется.
//
//  Пользователь - Неопределено - проверяется текущий пользователь ИБ.
//               - СправочникСсылка.Пользователи
//               - СправочникСсылка.ВнешниеПользователи - осуществляется
//                    поиск пользователя ИБ по уникальному идентификатору, заданному в реквизите.
//                    ИдентификаторПользователяИБ. Если пользователь ИБ не существует, возвращается Ложь.
//               - ПользовательИнформационнойБазы - проверяется указанный пользователь ИБ.
//
//  УчитыватьПривилегированныйРежим - Булево - если задано Истина, тогда для текущего пользователя
//                 функция возвращает Истина, когда установлен привилегированный режим.
//
// Возвращаемое значение:
//  Булево - Истина, если хотя бы одна из указанных ролей доступна
//           или функция ЭтоПолноправныйПользователь(Пользователь) возвращает Истина.
//
Функция РолиДоступны(ИменаРолей,
                     Пользователь = Неопределено,
                     УчитыватьПривилегированныйРежим = Истина) Экспорт
	
	РольАдминистраторСистемы = ЭтоПолноправныйПользователь(Пользователь, Истина, УчитыватьПривилегированныйРежим);
	РольПолныеПрава          = ЭтоПолноправныйПользователь(Пользователь, Ложь,   УчитыватьПривилегированныйРежим);
	
	Если РольАдминистраторСистемы И РольПолныеПрава Тогда
		Возврат Истина;
	КонецЕсли;
	
	МассивИменРолей = СтрРазделить(ИменаРолей, ",", Ложь);
	
	ТребуетсяРольАдминистраторСистемы = Ложь;
	НазначениеРолей = ПользователиСлужебныйПовтИсп.НазначениеРолей();
	
	Для Каждого ИмяРоли Из МассивИменРолей Цикл
		Если НазначениеРолей.ТолькоДляАдминистраторовСистемы.Получить(ИмяРоли) <> Неопределено Тогда
			ТребуетсяРольАдминистраторСистемы = Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если РольАдминистраторСистемы И    ТребуетсяРольАдминистраторСистемы
	 Или РольПолныеПрава          И Не ТребуетсяРольАдминистраторСистемы Тогда
		Возврат Истина;
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	СвойстваПользователяИБ = СвойстваПроверяемогоПользователяИБ(Пользователь);
	
	Если СвойстваПользователяИБ = Неопределено Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если СвойстваПользователяИБ.УказанТекущийПользовательИБ Тогда
		Для Каждого ИмяРоли Из МассивИменРолей Цикл
			//@skip-check using-isinrole
			Если РольДоступна(СокрЛП(ИмяРоли)) Тогда // Не заменять на РолиДоступны.
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	Иначе
		Роли = СвойстваПользователяИБ.ПользовательИБ.Роли;
		Для Каждого ИмяРоли Из МассивИменРолей Цикл
			Если Роли.Содержит(Метаданные.Роли.Найти(СокрЛП(ИмяРоли))) Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Возврат Ложь;
	
КонецФункции
Показать


Внимание вопрос - Что вернет Функция Пользователи.РолиДоступны("МояНоваяРоль") если это полноправный пользователь ?
А предположим у меня таких пользователей несколько но "МояНоваяРоль" назначена и должна работать только у одного конкретного пользователя
13. svezr 5 14.06.23 09:19 Сейчас в теме
Если требуется доступ или администраторам, или кому-то без полных прав, то один из вариантов - в моменте проверки использовать
Пользователи.ЭтоПолноправныйПользователь() ИЛИ Пользователи.РолиДоступны()

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

(12)
15. VPanin56 549 14.06.23 13:45 Сейчас в теме
(13) Проблема не в том как и чем проверить есть или нет "МояНоваяРоль" у пользователя ,а в том что если этот пользователь, кому назначили "МояНоваяРоль" оказался Полноправным пользователем, то БСП сама очистит у него все роли кроме Администратор системы и Полные права и наша дописка перестает работать.
Потому что в ней проверка строится не на Полные права а на "МояНоваяРоль", потому что так задумал инициатор задачи.
Потому что Полные права имеют 3 пользователя Иванов, Петров и Сидоров, но определенные действия с документом разрешены только Иванову.
unknown181538; uralkit@uralkit.ru; shu_vol; AlbertZ; Anchoret; +5 Ответить
17. svezr 5 14.06.23 15:02 Сейчас в теме
(15)
Я описал рабочий способ, которым неоднократно пользовался: копируется метод УправлениеДоступом.ЕстьРоль() в расширение, изменяется имя, из него убирается проверка на полноправного пользователя. Роль добавляется в профиль. Метод вызывается и в любом случае программно показывает наличие роли (вне зависимости от полноправности), поскольку используется анализ справочника (и пр) группы доступа. БСП Роли у пользователя очистит, но описанный метод вернёт все корректно - потому что принадлежность роли прописана в справочнике профиля групп доступа. Посмотрите код метода.

Если же необходима не программная проверка а в принципе сохранение роли (чтобы БСП не почистил) - то это, конечно, не поможет. Как-то видел модифицированный код в конфигурации, где закомментировали кусок с очисткой ролей полноправного пользователя.
unknown181538; +1 Ответить
14. dhurricane 14.06.23 12:47 Сейчас в теме
(12)
А предположим у меня таких пользователей несколько но "МояНоваяРоль" назначена и должна работать только у одного конкретного пользователя
С точки зрения разработчиков БСП у Ваших пользователей не должно быть Администраторов с разнообразным составном прав доступа. Так что это не "шляпа", это типичный сценарий проверки ролей у пользователя - администратор должен обладать всеми правами.

Ваш сценарий я тоже встречал. Крайне редко, конечно, но было 1-2 раза. Использовал прием из (13) - создавал аналог функции "УправлениеДоступом.ЕстьРоль".
16. VPanin56 549 14.06.23 13:46 Сейчас в теме
(14) ответил выше, думаю понятнее станет что проблема не чем проверить а как сохранить назначенную роль
18. dhurricane 14.06.23 16:32 Сейчас в теме
(16) Во-первых, а зачем собственно ее сохранять, эту роль? Во-вторых, Ваш подход к правам Иванова, Петрова и Сидорова противоречит стандартам разработки. Поэтому-то такая проверка, как в Вашем примере, и не поддерживается БСП.
https://its.1c.ru/db/v8std#content:689:hdoc
23. unknown181538 158 16.06.24 10:46 Сейчас в теме
(14) Прикол еще в том, что разработчики БСП не удосужились уведомить, что у них такая точка зрения. Например, добавлении доп. группы полноправному пользователю, они могли бы предупреждение выводить
Я много лет не мог понять, почему у меня доп. роли пропадают.
24. anrahell 8 06.09.24 16:23 Сейчас в теме
(14)
С точки зрения разработчиков БСП у Ваших пользователей не должно быть Администраторов с разнообразным составном прав доступа. Так что это не "шляпа", это типичный сценарий проверки ролей у пользователя - администратор должен обладать всеми правами.


У разработчиков БСП есть исключение в виде роли "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" :-)
19. tormozit 7230 19.06.23 23:43 Сейчас в теме
Сделал более универсальное решение той же проблемы https://infostart.ru/1c/tools/1882890/
Созинов; uralkit@uralkit.ru; Student1C; +3 Ответить
20. VPanin56 549 21.06.23 09:03 Сейчас в теме
(19) Согласен что ваше решение более универсальное и "правильное"

Но у меня не было времени изобретать "самокат", вставил "костыли" и побежали дальше ;)

Может быть когда-нибудь я и перепишу этот костыль, хотя конкретно эта добавленная Роль была придумана для конкретной задачи и конкретного пользователя. Есть вероятность что продолжения у этого решения нет и универсальности оно не потребует.
21. st8899 06.10.23 14:59 Сейчас в теме
(20)
вот у меня такая же проблема.
https://forum.infostart.ru/forum9/topic304301/?result#postform

Только права скидывает и у юзеров, у которых нету галок Полные права, Администратор и пр. При этом в предприятии профиль есть и у юзера он активный, но расширение ему не доступно (пока не вернешь галочки в конфигураторе)
Какой то лютый баг платформы или БСП последних версий... Как решить - пока не знаю...(
22. &rew 52 15.03.24 05:59 Сейчас в теме
(21)Если пользователь не полноправный, пишите свой регистр сведений в расширении, добавляете туда пользователей (или физ. лиц пользователей), которым что-то можно (или нельзя). В вашем расширении проверяете не права, а наличие пользователя в этом регистре. Всё. Я так это победил
25. YNik 04.10.24 21:26 Сейчас в теме
В последних версиях БП перенесли заполнение ДополнительныеРолиАдминистратора из процедуры ОбновитьРолиПользователей в процедуру ТекущиеСвойстваПользователей, поэтому ищем в ней строку:

ДополнительныеРолиАдминистратора.Вставить("ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок");

и добавляем свои 3 строчки

#Вставка
ДополнительныеРолиАдминистратора.Вставить("ИМЯ_своей_роли");
#КонецВставки
belov-k; angur; +2 Ответить
26. unknown181538 158 21.11.24 20:51 Сейчас в теме
Оставлю это здесь - может тоже пригодится. БСП, как оказалось, также добавляет роли по умолчанию из расшерения. В частности для Инфостарт Тулкит роль ИТК_Полные права. Поскольку, я не хочу, чтобы полноправные пользователи видели Тулкит в интерфейсе, то долго бился над этой проблемой.

Справочник ПрофилиГруппДоступа - модуль менеджера

    ИзменениеИКонтроль("ПодготовленныеСтандартныеРолиРасширенийСеанса")
Функция VD_ПодготовленныеСтандартныеРолиРасширенийСеанса()

	Результат = Новый Структура;
	Результат.Вставить("ОбщиеПрава", Новый Массив);
	Результат.Вставить("БазовыеПрава", Новый Массив);
	Результат.Вставить("БазовыеПраваВнешнихПользователей", Новый Массив);
	Результат.Вставить("АдминистраторСистемы", Новый Массив);
	Результат.Вставить("ПолныеПрава", Новый Массив);
	Результат.Вставить("Все", Новый Соответствие);
	Результат.Вставить("ДополнительныеРолиАдминистратора", Новый Соответствие);

	РазделениеВключено = ОбщегоНазначения.РазделениеВключено();

	Для Каждого Роль Из Метаданные.Роли Цикл
		Расширение = Роль.РасширениеКонфигурации();
		Если Расширение = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		ИмяРоли = Роль.Имя;

		Если СтрЗаканчиваетсяНа(ВРег(ИмяРоли), ВРег("ОбщиеПрава")) Тогда
			Результат.ОбщиеПрава.Добавить(ИмяРоли);
			Результат.ДополнительныеРолиАдминистратора.Вставить(ИмяРоли, Истина);
			Результат.Все.Вставить(ИмяРоли, "ОбщиеПрава");
        #Удаление
		ИначеЕсли СтрЗаканчиваетсяНа(ВРег(ИмяРоли), ВРег("ПолныеПрава")) Тогда
			Результат.ПолныеПрава.Добавить(ИмяРоли);
			Результат.ДополнительныеРолиАдминистратора.Вставить(ИмяРоли, Истина);
			Результат.Все.Вставить(ИмяРоли, "ПолныеПрава");
        #КонецУдаления
		ИначеЕсли СтрЗаканчиваетсяНа(ВРег(ИмяРоли), ВРег("БазовыеПрава")) Тогда
			Результат.БазовыеПрава.Добавить(ИмяРоли);
			Результат.Все.Вставить(ИмяРоли, "БазовыеПрава");

		ИначеЕсли СтрЗаканчиваетсяНа(ВРег(ИмяРоли), ВРег("БазовыеПраваВнешнихПользователей")) Тогда
			Результат.БазовыеПраваВнешнихПользователей.Добавить(ИмяРоли);
			Результат.Все.Вставить(ИмяРоли, "БазовыеПраваВнешнихПользователей");

		ИначеЕсли СтрЗаканчиваетсяНа(ВРег(ИмяРоли), ВРег("АдминистраторСистемы")) Тогда
			Результат.АдминистраторСистемы.Добавить(ИмяРоли);
			Результат.Все.Вставить(ИмяРоли, "АдминистраторСистемы");
			Если Не РазделениеВключено Тогда
				Результат.ДополнительныеРолиАдминистратора.Вставить(ИмяРоли, Истина);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	Возврат ОбщегоНазначения.ФиксированныеДанные(Результат);

КонецФункции
Показать
Оставьте свое сообщение