Добрый день! Кто сталкивался, когда не срабатывает конструкция с собственными ролями, прошу помочь!
Разрабатываю права для Ответственного за список начислений (тестирую на своем примере):
1) Создала в конфигураторе роль «ИзменятьВидыНачисленийУдержаний»
2) Создала профиль «Изменять виды начислений, удержаний» с единственной разрешенной ролью «ИзменятьВидыНачисленийУдержаний»
3) Создала группу «Изменять виды начислений, удержаний» с профилем «Изменять виды начислений, удержаний»
4) Включила себя в эту группу
РЕЗУЛЬТАТ: не разрешает мне сохранять изменения в виде начисления. В отладчике РольДоступна("ИзменятьВидыНачисленийУдержаний") возвращает Ложь. Что не так сделано?
---
Да, группа Администраторы "вытесняет" все назначаемые роли, кроме своих собственных - Полные права и Администрирование. Для проверки наличия роли с учетом полноправных пользователей используйте любой из следующих методов:

```1c
    ЕстьПраво = Пользователи.РолиДоступны("ИмяРоли");
    ЕстьПраво = УправлениеДоступом.ЕстьРоль("ИмяРоли");
```
---
Прошу прощения за глупый вопрос. Но Вы случайно не под административными правами проверяете? Если все таки нет, то обновляли ли Вы служебные данные после добавление в конфигурацию роли и до назначения ее себе?
---
Прошу прощения за глупый вопрос. Но Вы случайно не под административными правами проверяете? Если все таки нет, то обновляли ли Вы служебные данные после добавление в конфигурацию роли и до назначения ее себе?
---
Добрый день, dhurricane! Вообще-то под собственными правами с правом администрирования - не думала, что это влияет! Спасибо за наводку, протестирую!
---
Спасибо, dhurricane! Дело действительно оказалось в правах типовой группы Администраторы. Видимо, программа при максимальных правах текущего пользователя не анализирует остальной перечень присвоенных ему прав, вроде логично. Сама бы не догадалась, хотя, припоминается, где-то об этом слышала раньше...
---
Да, группа Администраторы "вытесняет" все назначаемые роли, кроме своих собственных - Полные права и Администрирование. Для проверки наличия роли с учетом полноправных пользователей используйте любой из следующих методов:

```1c
    ЕстьПраво = Пользователи.РолиДоступны("ИмяРоли");
    ЕстьПраво = УправлениеДоступом.ЕстьРоль("ИмяРоли");
```
---
Спасибо, dhurricane! В коде ЗУП 3 РолиДоступны() заменены на РольДоступна() с соотв. комментарием, я даже и пробовать не стала, а ЕстьРоль(0 попробую, не знала, спасибо за расширение кругозора!))
---
УправлениеДоступом.ЕстьРоль("ИмяРоли") это тоже возвращает всегда Истина для полноправного пользователя
---
скопируйте себе эту функцию в свой модуль и выкиньте из нее

```1c
    Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда
    Возврат Истина;
    КонецЕсли;
```
---
Так в этом исходная задача и заключалась: вернуть Истина для полноправного пользователя, когда в действительности ему эта роль не назначена.
---
если конфигурация на базе БСП, то лучше воспользоваться функцией от туда:

```1c
    УправлениеДоступом.ЕстьРоль("ИзменятьВидыНачисленийУдержаний")
```
---
Спасибо, spacecraft! Попробую! Все же нужно плотнее знакомиться с БСП, а не довольствоваться принципом "по образу и подобию", даже если "нужно срочно" ))
---
Собственная роль - это, конечно, хорошо. А права у этой роли на изменение видов начислений и удержаний есть? В журнале регистрации фиксируется отказ в доступе по какому праву? В вашем случае <ВИД НАЧИСЛЕНИЙ И УДЕРЖАНИЙ> это что?
---
Ольга, добрый день! Я не для собственно права на изменение начисления (расширенные права есть у многих пользователей), а на отказ от сохранения изменений всем, кроме одного ответственного в организации за настройку начислений, удержаний
---
Тоже чего-то встрял на ровном месте.
Служебная роль создана и РольДоступна() не видит её у пользователя.
Тоже назначение роли, что бы даже полноправный не мог открыть форму без этой роли. Вопрос, что полноправный может её себе сам назначить - не поднимаем сейчас. Вопрос - почему РольДоступна() не видит эту роль у пользователя...?
Регистр сведений ПраваРолей обновил данные регистра.
БСПшные функции не подходят, так как при наличии у пользователя полных прав - всегда возврат будет истина.
Но почему же РольДоступна() не работает?
---
РольДоступна обращается к метаданным, которые задаются в конфигураторе в разделе Администрирование-Пользователи с помощью галочек. Для профилей доступа применяются свои методы, о них сказано выше.
---
Сделал в итоге так вот и получилось даже перезаходить не надо пользователю, налету ограничение срабатывает.

```1c
    &НаСервере
    Процедура рха_ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)

    УстановитьПривилегированныйРежим(Истина);
    Пользователь = Пользователи.АвторизованныйПользователь();
    Роль = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Роль.рхаСлужебнаяРольДоступКСправочникуФизлица");

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

    УстановитьПривилегированныйРежим(Ложь);

    Если НЕ Результат Тогда
    Отказ = Истина;
    Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Тогда
    Сообщить("Нет разрешения для пользователя на просмотр Физического лица!");
    Иначе
    Сообщить("Нет разрешения для пользователя на создание Физического лица!");
    КонецЕсли;
    КонецЕсли;

    КонецПроцедуры
```
---
мог бы просто поставить галку в конфигураторе для нужных пользователей и все бы заработоло
---
В конфигураторе не по феншую пользователям уже настраивать....
Так бы да, с утра бы сообразил сразу...
---
В этом один недостаток - эти галки для добавленных вручную ролей слетают при обновлении почему-то
---
Настроенные в конфигураторе галки для новых ролей слетают после обновления базы
---
Этот код очень пригодился, типовые так нормально и не заработали при полных правах
---
Я да, как-то раньше много пользовался на самописных и на старых этим методом. А тут несколько лет не трогал и в ЕРПУХе не сработало, аж растерялся, что стою на асфальте в лыжах...