1с при проверке ролей для пользователей найдены ошибки

Обновлено: 02.07.2024

Пользователю нужно дать полные права на справочник Банковские счета. Но у пользователя не должно быть прав на справочник Контрагенты. Но так как при сохранении записи в справочнике Банковские счета, в справочнике Контрагенты записывается поле ОсновнойБанковскийСчет.
Как настроить права на справочник Контрагенты, чтобы у пользователя были права только на поле ОсновнойБанковскийСчет?

Думала, что достаточно у полей убрать право Редактирование - но так не получилось.

(1) user_2010, нужно дать право изменение.

Если не получается настроить доступ. Идем в журнал регистрации и смотрим какого права нет у пользователя и даем.

насколько я поняла, нужно на справочник Контрагенты дать права: Просмотр, Чтение, Изменение.
И право Редактирование оставить только одному полю ОсновнойБанковскийсчет. Верно? (3) user_2010, просто изменение. Чтение само добавится. Просмотр нужен если пользователь смотреть собрался. Редактирование если интерактивно редактировать будет. насколько я понял - нужно на справочнике контрагенты добавить все права (редактирование, просмотр, чтение, изменение), а вот с реквизитов, кроме основнойбанковскийсчет и стандартных реквизитов, убрать редактирование (возможно и просмотр). Тогда на УФ будет невозможно редактировать все кроме основнойбанковскийсчет. не получается настроить никак: либо права на все поля справочника Контрагенты, либо ни на одно поле нет прав в справочнике Контрагенты.
(5) 32ops, сейчас попробую ваш вариант. (5) 32ops, да, ваш вариант сработал! Спасибо!
Единственное неудобство, что в интерфейсе карточки Контрагента все поля доступны для редактирования. и если пользователь изменит не только Банковский счет, а еще какое-нибудь поле, то программа пишет "Нарушение прав доступа". и нет конкретики - что за поле недоступно. А хотелось бы, чтобы все поля были недоступны для редактирования, кроме Банковских счетов.
Такое возможно настроить? (7) user_2010, ну так поиграйтесь в правами. Вам же все объяснили редактирование это редактирование, просмотр это просмотр, изменение это не интерактивный режим.

(8) Xershi, играюсь уж с пятницы.

какая-то логика есть назначении прав.
я делаю так:
1. изменяю права на роль в режиме 1С.Конфигуратор
2. в режиме 1С.Предприятие создаю новый Профиль доступа - даю права на мою роль
3. в режиме 1С.Предприятие добавляю права пользователю на мой новый профиль.

А если я просто изменяю права у роли - какие действия нужно выполнить еще?

. возникло подозрение, что я-то меняю. а реально права остаются теже? не меняются, потому как сейчас с правами, как написал (5) 32ops, ранее давала редактировать прочие поля, а теперь с этими же правами - уже не дает редактировать прочие поля.
.

(9) user_2010, ну во первых кэш почистите! Во вторых пользователь должен перезайти в базу. пользователем, конечно, перезахожу.
а кэш надо каждый раз чистить - если права перенастраиваю?

(11) user_2010, т.к. я каждый раз чищу его после обновления, то гарантировать что вам не нужно не смогу))

А так по идее не обязательно, но редомендательно.

Ну вот.. в свою же тему пишу снова.

Проблема с настройкой прав. Не пойму в чем затык.
Добавила РегистрСведений в свою Подсистему. Создала Роль, которой дала полные права на подсистему и на мой РегистрСведений.
Создала ПрофильГруппыДоступа, в него включила только мою Роль.
Назначила данную группу доступа пользователю. Пользователь видит Подсистему, видит мой РегистрСведений, но добавить запись в него не может.
Не пойму почему.
Кэш чищу.

(14) user_2010, странное дело - редактировать записи регистра сведений дает, а вот создать новую. запись - не дает: Нарушение прав доступа!
. Какие права надо еще дать? Регистр сведений независимый, для роли указаны все галочки для моего регистра сведений.

(20) alwiz3,
Событие = Доступ. Отказ в доступе
Отказ права = АдминистрированиеДанных (21) user_2010, ну так в чем проблема добавить это право пользователю? (29) Хрень какая-то. А точно это то событие. может все таки есть другое. (30) alwiz3, согласна. Но ведь помогло добавление роли права Администрирование данных! . поищу еще события.

(20) alwiz3, (22) Xershi, Для моей Роли добавила право АдминистрированиеДанных - и заработало! Спасибо!

Чего из этого не хватало пользователю? Выполнение методов объекта СтандартноеХранилищеНастроекМенеджер?

может сделать проще

1. не трогать типовые права
2. создать(сгенерить, скоприровать) новую форму для редактирования банковских счетов
3. закинуть эту форму в дополнительные обработки и дать право на нее определенному пользователю
4. В этой обработке при записи и в остальных точках модификации данных УстановитьПривилегированныйРежим()

(16) shmeler, спасибо за совет!

в данный момент у меня проблема с настройкой прав доступа к созданному мной независимому регистру сведений - нет прав создание записи в регистр.

пользователь с полными правами - может создавать новые записи в регистр сведений.

люди! помогите, плз!

в чем может быть проблема с правами на регистр сведений?

При создании нового объекта конфигурации право на него получает только роль "ПолныеПрава", для остальных ролей надо настраивать вручную. (24) mazechild, так я настроила свою роль с полными правами на мой регистр сведений. Почему в другие регистры сведений пользователь мог добавлять записи, а в добавленный мной - не мог?

(28) user_2010, открывай роли и анализируй!

Ты не понимаешь как работают роли?

Проверила: убрала право АдминистрированиеДанных, дала права на справочник Удалить_УчетныеЗаписиДокументооборота - добавить запись в регистр сведений нельзя.

Право АдминистрированиеДанных решает проблему. Но смущает что этого права нет у других обычных ролей.

(35) user_2010, значит у вас код так работает. Возможно при записи в регистр включается привелигированный режим, тогда и не нужно права, оно дается только под эту операцию в коде.

Что конкретно пояснить, спрашивайте. Если не понимаете в принципе, то просто методическую информацию почитайте.

(37) Xershi, меня сейчас интересует: если пользователь от моей роли получает право АдминистрированиеДанных для конфигурации - чем это чревато? Это нормально? Или такое право АдминистрированиеДанных ни в коем случае нельзя давать простому пользователю?

(40) user_2010, у такого пользователя над базой будет больше прав. Может и повредить, по не знанию.

Или удалить, то что не нужно. Я же вам говорил посмотрите методическую информацию по ролям, она скудная, но хоть что-то.

(41) Xershi, я читала методичку и даже здесь привела выдержку из нее (27). (35) См. подписки на события, может при добавлении записи что-то еще обрабатывается. Я так понял там БСП? Попробуй еще запустить с ключом /cЗапуститьОбновлениеИнфомационнойБазы. (43) alwiz3, так я не делала для своего регистра сведений подписок на события. (48) alwiz3, ага. хорошо - постараюсь в этом направлении посмотреть. спасибо! (50) а вообще самое верное - включить замер производительности, попытаться добавить и запись и смотреть что выполнялось.

(52) alwiz3, зашла отладчиком под пользователем с правами на мою роль (с доступом на мой рег сведений). При добавлении записи в регистр сведений выдается такая ошибка:

: Ошибка при вызове метода контекста (Загрузить)
ОсновнаяОрганизация = ХранилищеОбщихНастроек.Загрузить("ОсновнаяОрганизация". ИмяПользователяИБ);
по причине:
Нарушение прав доступа!

ОсновнаяОрганизация = ХранилищеОбщихНастроек.Загрузить("ОсновнаяОрганизация". ИмяПользователяИБ);

А пользователь точно текущий. Не должны права на свое хранилище рубиться

(62) alwiz3, пользователь точно текущий, смотрю отладчиком:
когда пользователь открывает "Кассовые документы" идет обращение к этой строке кода
ОсновнаяОрганизация = ХранилищеОбщихНастроек.Загрузить("ОсновнаяОрганизация". ИмяПользователяИБ);
но в этом случае ИмяПользователяИБ = Неопределено - почему-то.
А когда я в своем регистре сведений добавляю запись и вызываю поиск основной организации - в этом случае ИмяПользователяИБ = текущему пользователю и выдается ошибка на нарушение прав доступа! когда пользователь открывает "Кассовые документы" идет обращение к этой строке кода
ОсновнаяОрганизация = ХранилищеОбщихНастроек.Загрузить("ОсновнаяОрганизация". ИмяПользователяИБ);
но в этом случае ИмяПользователяИБ = Неопределено - почему-то.

СтандартноеХранилищеНастроекМенеджер (StandardSettingsStorageManager)
Загрузить (Load)
Синтаксис:

Загрузить(<КлючОбъекта>, <КлючНастроек>, <ОписаниеНастроек>, <ИмяПользователя>)
Параметры:

Тип: Строка.
Ключ объекта настройки.
Подробнее см. в Настройки, автоматически сохраняемые в системном хранилище.
<КлючНастроек> (необязательный)

Тип: Строка.
Ключ загружаемых настроек.
Значение по умолчанию: Пустая строка.
<ОписаниеНастроек> (необязательный)

Тип: ОписаниеНастроек.
Описание настроек.
Если не указан, то описание настройки не загружается.
<ИмяПользователя> (необязательный)

Тип: Строка.
Имя пользователя, настройки которого загружаются.
Если не указан, то загружаются настройки текущего пользователя.
В случае переименования пользователя прежние настройки не загружаются.
Если будет создан пользователь, имя которого совпадает с именем прежнего пользователя, для него будут использованы существующие настройки.
Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных.

Выходит, не текущий был.

(67) alwiz3, спасибо! буду смотреть что с пользователями. Но отладчик показывает именно того пользователя, под которым запущена 1С!
Текущего пользователя передала Неопределено - и заработало! Спасибо огромное!

(66) Xershi, мы используем разную аутентификацию: пользователи заходят в 1С с V Аутентификация операционной системы.
Мне же нужно проверить права и функционал под пользователем - я установила еще V Аутентификация 1С:Предприятия - запускала 1С, выбирала пользователя и проверяла.

(69) user_2010, аутенфикация ни на что не влияет, если только у вас код не завязан на этом. Речь шла об УФ и ОФ.

Решение:
0. Создаем роль пустую , называем "ЗапретНаРедактированиеСправочника"
1. В общем модуле было создан объект: ЗапретНаРедактированиеСправочника (рис1) с кодом:

Процедура ЗапретНаРедактированиеСправочникаПриЗаписи(Источник, Отказ) Экспорт

Отказ = РольДоступна("ЗапретНаРедактированиеСправочника");
Если РольДоступна("ЗапретНаРедактированиеСправочника") Тогда
Сообщить ("У вас нет прав, обратитесь к руководителю отдела!");
КонецЕсли;

3.Добавляем пользователю ЧЕРЕЗ КОНФИГуРАТОР роль "ЗапретНаРедактированиеСправочника"
4.Радуемся жизни :)

Проверка прав доступа

Область применения: управляемое приложение, обычное приложение.

1. В случае большого количества ролей в конфигурации (от нескольких десятков) не рекомендуется использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по ролям, пользовательскую видимость полей формы по ролям, использование команд по ролям). Вместо этого следует придерживаться следующих подходов:

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

Эти меры позволяют:

  • существенно упростить работу из кода с элементами управления, которые пропадают из коллекции Элементы (код Элементы.ИмяЭлемента.ИмяСвойства становится нерабочим);
  • повысить устойчивость кода к пересмотру состава ролей в конфигурации;
  • организовать контроль использования ролей в конфигурации (в противном случае, выполнять анализ прав доступа по флажкам, назначенных для ролей в различных элементах произвольных форм конфигурации, крайне затруднительно).

2. Не рекомендуется использовать ролевую настройку видимости в командном интерфейсе конфигурации, командном интерфейсе основного раздела, а также рабочей области начальной страницы. Вместо этого следует использовать настройку прав на разделы командного интерфейса, общие формы и объекты, включенные в командный интерфейс или в рабочую область. Это позволяет повысить предсказуемость поведения управляемого интерфейса для пользователя, а также упростить расследование ошибок.

3. Для проверки прав доступа в коде следует использовать метод ПравоДоступа .
Например, неправильно:

Если РольДоступна("ДобавлениеИзменениеСтранМира") Тогда .
Если РольДоступна("ПросмотрОтчетаПопулярныеСтраны") Тогда .

Если ПравоДоступа("Редактирование", Метаданные.Справочники.СтраныМира) Тогда .
Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ПопулярныеСтраны) Тогда .

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

4. В тех случаях, где роль не дает никаких прав на объекты метаданных, а служит только для определения того или иного дополнительного права, следует использовать метод РольДоступна . При использовании в конфигурации Библиотеки стандартных подсистем (БСП) следует использовать функцию РолиДоступны общего модуля Пользователи :
Например, без использования БСП:

Если РольДоступна(. ) Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда .

В этой статье речь пойдет о настройке прав доступа пользователей к объектам системы 1С.

В 1С 8для управления доступа пользователей используется отдельный объект метаданных, который называется Роли.

Далее мы рассмотрим, как использовать и настраивать роли в 1С предприятие 8.3.

Обратите внимание! Эта статья написана в помощь программистам. Настройка прав в пользовательском режиме на примере 1С Бухгалтерия рассмотрена в данной статье.

Роли в метаданных

Ниже мы рассмотрим подробно каждый атрибут метаданных при настройке роли пользователя 1С 8.3.

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Общие настройки роли 1С

Если открыть объект метаданных Роль, мы можем увидеть следующую картину:

Настройка ролей

Будем рассматривать только вкладку Права.

Следует обратить внимание на галочки в нижней части:

Настройки прав на всю конфигурацию

Если открыть Роль и кликнуть на корень конфигурации, мы увидим следующие настройки:

Настройка прав на конфигурацию

Подробнее о каждом из прав на всю конфигурацию:

Настройка прав 1С на другие объекты метаданных

Роль менеджера по продажам

Права только для документов:

Только для регистров накопления и бухгалтерии

Только для обработок и отчетов:

Привилегированный режим 1С

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

Доступна ли роль 1С пользователю?

Чтобы узнать, нужно выполнить функцию РольДоступна(), передав туда название роли строкой.
Например:

Нарушение прав доступа

Такую ошибку можно увидеть, если недостаточно прав на чтение/редактирование/удаление данных. Система выдаёт вот такую ошибку:

битая ссылка

Для того чтобы понять, битая ссылка или нет, просто зайдите в базу под пользователем с полными правами.

Для массового поиска таких ошибок подойдет статья как найти битые ссылки в базе 1С.

P.S. Если у Вас все же не получилось разобраться в ролях пользователей, Вы можете заказать услуги 1С программиста.
Видео с примером настройки прав в 1С бухгалтерии 3.0:

Другие статьи по 1С:

    (обновление 1С, резервные копии и т.д); (для пользователей)

Окно ошибки при нарушении прав доступа в 1С

Привилегированный режим работы

В системе есть возможность временно отключить проверку прав доступа. Такой режим называется привилегированным. В привилегированном режиме разрешены любые операции с базой и не производится контроль RLS.

Включение привилегированного режима осуществляется методом

Если вызвать метод УстановитьПривилегированныйРежим (Ложь) большее количество раз, чем УстановитьПривилегированныйРежим (Истина) , то будет вызвано исключение.

Получить текущее значение привилегированного режима можно функцией

которая возвращает значение типа Булево.

Безопасный режим работы

В безопасном режиме:

  • привилегированный режим отменяется, а попытка перехода в привилегированный режим игнорируется;
  • запрещено использование внешних средств по отношению к 1С (доступ к файловой системе, доступ к интернету, загрузка внешних компонент, механизмы COM).

Включение безопасного режима осуществляется методом

Если вызвать метод УстановитьБезопасныйРежим (Ложь) большее количество раз, чем УстановитьБезопасныйРежим (Истина) , то будет вызвано исключение.

Получить текущее значение безопасного режима можно функцией

которая возвращает значение типа Булево.

Программная работа с Ролями

Для проверки доступности Роли текущему пользователю:

Для определения права доступа (чтение, изменение и т.д.) к объекту метаданных:

Для проверки прав доступа текущего пользователя на объект метаданных:

Процедура ВыполнитьПроверкуПравДоступа () отличается от функции ПравоДоступа () тем, что доступна только для текущего пользователя. При отсутствии права вызывается исключение, а в журнал регистрации пишется событие ОтказВДоступе.

Для получение информации о праве доступа на определенный объект метаданных для пользователя или роли с учетом указанных полей:

Для получения представления права по имени:

Программная работа с Ролями в БСП

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

Пользователи . РолиДоступны ( ИменаРолей , Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина)
Пользователи . ЭтоПолноправныйПользователь ( Пользователь = Неопределено, ПроверятьПраваАдминистрированияСистемы = Ложь, УчитыватьПривилегированныйРежим = Истина)
УправлениеДоступом . ЕстьРоль (Знач Роль , Знач СсылкаНаОбъект = Неопределено, Знач Пользователь = Неопределено)
УправлениеДоступом . ЕстьПраво ( Право , СсылкаНаОбъект , Пользователь = Неопределено)
УправлениеДоступом . ЧтениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ИзменениеРазрешено ( ОписаниеДанных )
УправлениеДоступом . ОграничиватьДоступНаУровнеЗаписей ()
УправлениеДоступом . ПраваПоИдентификаторам ( Идентификаторы = Неопределено)

В общих модулях у каждого метода есть подробное описание. Там можно посмотреть описание самого метода, входных параметров и возвращаемого значения.

Остались вопросы?
Спросите в комментариях к статье.

Читайте также: