В БСП (1С:Библиотека стандартных подсистем 8.2) если у пользователя есть полные права, то остальные роли игнорируются. Т.е. если у пользователя полные права и роль "Роль1", а в коде стоит проверка "Если РольДоступна("Роль1")..." то у пользователя эта проверка может не сработать. В этом случае надо добавлять так же в условие проверку на РольДоступна("ПолныеПрава")
Во всем виновата процедура "ОбновитьРолиПользователей" в общем модуле "УправлениеДоступомСлужебный". Для Администратора все роли стираются и заполняются обязательными и дополнительными ролями:
Если Администраторы[ТекущийПользователь] <> Неопределено Тогда
ТекущиеНовыеРоли = НовыеРоли;
НовыеРоли = ТекущиеНовыеРоли.Скопировать(Новый Массив);
Для Каждого КлючИЗначение Из ОбязательныеРолиАдминистратора Цикл
НовыеРоли.Добавить().Роль = КлючИЗначение.Ключ;
КонецЦикла;
Для Каждого КлючИЗначение Из ДополнительныеРолиАдминистратора Цикл
Если ТекущиеНовыеРоли.Найти(КлючИЗначение.Ключ, "Роль") = Неопределено Тогда
Продолжить;
КонецЕсли;
НовыеРоли.Добавить().Роль = КлючИЗначение.Ключ;
КонецЦикла;
КонецЕсли;
Если хотим, чтобы наши роли автоматически добавлялись для администратора, тогда надо добавить после этого код типа:
//Если для пользователя выбраны "наши" дополнительные роли, то добавляем их в таблицу "НовыеРоли"
ВыбранныеДополнительныеРоли = Новый Массив;
Для Каждого Стр Из ТекущиеНовыеРоли Цикл
Если ВРег(Лев(Стр.Роль, 4)) = "ДОП_" Тогда
ВыбранныеДополнительныеРоли.Добавить(Стр.Роль);
КонецЕсли;
КонецЦикла;
Для Каждого Стр Из ВыбранныеДополнительныеРоли Цикл
НовыеРоли.Добавить().Роль = Стр;
КонецЦикла;
В этом случае все наши роли должны начинаться с "ДОП_". Этот код можно добавить в расширение, заменяя стандартную процедуру.
|