Вы здесь

Проверка прав доступа на уровне ролей 1С

Настройка доступа на уровне ролей не всегда спасет от ошибок программистов.
Настройки ролей пользователей были по максимому урезаны на уровне ролей. Только у роли бухгалтер был доступ к справочнику подразделения компании и только на программное изменение. Однако один пользователь все-таки умудрился переместестить в иерархии подразделение. В справочнике подразделения компании в списке на обработчик ПроверкаПеретаскивания был код:

 

Т.е. встроенная проверка доступа и обработки отключается, а выполняется код из обработчика Перемещение. Естественно, вся проверка, которая была написана ограничивалась доступом на редактирование справочника в правах (разрешено редактировать или нет). Различия между ручным редактированием и программных тут не учитывались.

Исправляем это недорозумение.
Необходимо в общий обработчик для справочников добавить следующее:

 

И если у пользователя права только на программное изменение, то код идущий следом за этим не выполнится и программное изменение родителя не последует.

Краткая справка функции ПравоДоступа
Синтаксис:

 

Параметры:
<Право> (обязательный)
Тип: Строка. Название права доступа.
<Объект метаданных> (обязательный) — Объект метаданных.
<Пользователь/Роль> (необязательный)
Тип: ПользовательИнформационнойБазы, Метаданные.Роли.Роль
Возвращаемое значение:
Тип: Булево. Истина - право доступа к объекту установлено; Ложь - в противном случае.
Описание:
Показывает установку права доступа к объекту метаданных для текущего пользователя.
Вызов метода всегда требует административных прав, если явно указан третий параметр - Пользователь/Роль, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется.
Примечание:
Права доступа к объектам метаданных устанавливаются при конфигурировании ролей.

Комментарии

А вот похожи и фиг, если в правах прописано условие, и по нему нет доступа к конкретному объекту, то все равно будет истина

Приведите код, который Вы использовали. Возможно не так вызывали функцию?