Skip to main content

Пользователи и роли

После добавления роли, нужно обновить БД клавишей F7 чтобы роль отобразилась в списке ролей пользователей.

Ролевая модель доступа. Роли независимые, один уровень. Иерархии ролей нет. Но уУ одного пользователя может быть несколько ролей. При нескольких ролях у пользователя приоритет разрешения. Если хотя бы в одной роли есть разрешение, то доступ будет разрешен, если во всех ролях есть запрещение, то доступ будет запрещен. Роли можно копировать для упрощения настроек

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

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

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

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

Основные и интерактивные права взаимосвязаны. НВзапример, существует основное право Удаление, которому соответствуют два интерактивных права: Интерактивное удаление и Интерактивное удаление помеченных. Если пользователю запрещено Удаление, то и все интерактивные «удаления» также будут запрещены для него. В то же время, если пользователю разрешено Интерактивное удаление помеченных, это значит, что Удаление ему также разрешается.

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

как только

Иеразработчхик снимает разрешение на какое-либоя прав

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

Неявное использование прав доступа и ускорение работы

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

Объекты конфигурации могут выполнять обращения к некоторым полям базы данных неявно. При этом наложение 
ограничений доступа выполняется способом «все», что может приводить к неожиданным сообщениям о нарушении прав  доступа. Поэтому ограничивать доступ к таким полям нельзя.

Включение автонумерации или контроля уникальности номеров  объектов приводит  к неявному  чтению  поля  Код  (для  документов,  бизнес  процессов  и  задач  –  Номер)  при создании нового объекта и при его записи.  Если  в  справочниках  в  качестве  серии  кодов  выбрано  «в  пределах  подчинения»,  то происходит неявное чтение полей Код, Родитель. Если используется иерархия групп и элементов, то кроме этого неявно считывается поле ЭтоГруппа. При выборе в качестве серии кодов «в пределах подчинения владельцу» неявно будет выполняться чтение полей Код и Владелец. 

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

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

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

Ограничения доступа на уровне записей базы данных


Использовать в случае крайней необходимости!


Механизм RLS (Record Level Security). Нагружает систему дополнительными запросамим

Настраивается только для основных прав. Для регистров Инакопления, бухгалтерского учета и расчета условия позволяют разграничить доступ по значениям измерений (для регистров бухгалтерского учета по балансовым измерениям), а для объектных данных и регистров сведений условия позволяют разграничивать доступ к данным по любым полям.

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

Способы настройки ограничений: 


<Прочие поля>Конкретное имя поля
Способ установки ограниченияНа всю записьНа отдельное поле записи
Использование при запросеБудет накладываться для всех полей объекта, кроме полей, для которых ограничения заданы явным образомУсловие будет накладываться только в том случае, если в запросе присутствует поле, для которого задано ограничение

Данные могут быть выбраны из базы запросом или при помощи объектной техники. При использовании объектного чтения объект всегда будет считан из базы целиком. При использовании запроса есть возможность явно указать только необходимые поля, поэтому если в запрос не попадут поля с ограничениями, то данные записей будут предоставлены. Есть дополнительная деталь. Существует два способа функционирования ограничений доступа:

  • Все. Операция должна быть выполнена над всеми подразумеваемыми данной операцией объектами базы данных. Если при выполнении такой операции должны быть прочитаны или изменены объекты базы данных, для которых не выполняются соответствующие ограничения доступа, то операция завершается аварийно из-за нарушения прав доступа 
  • Разрешенные. При выполнении операции над данными должны быть прочитаны только те объекты базы данных, которые удовлетворяют соответствующим ограничениям доступа. Объекты базы данных, не удовлетворяющие ограничениям доступа, при выполнении такой операции считаются отсутствующими и на результат операции не влияют. 

При отображении динамических списков используется способ «Разрешенные», а при получении объектов средствами встроенного языка и при записи объектов в базу данных применяется способ «Все». В запросах способом функционирования ограничений можно управлять. Если в тексте запроса используется ключевое слово РАЗРЕШЕННЫЕ, то работа ограничений выполняется в соответствии с одноименным способом, в противном случае используется способ «Все».

Пример отличия в исполнении запроса в режиме ВСЕ и в режиме РАЗРЕШЕННЫЕ. В таблице есть поле Контрагенты, на него установлено ограничение на наименование. Есть и как записи с данным неименованием, так и 

 1c_admin_rights2.JPG

Текст первого запроса: 

ВЫБРАТЬ 
    Контрагенты.Наименование КАК Наименование 
ИЗ 
    Справочник.Контрагенты КАК Контрагенты

Текст второго запроса 

ВЫБРАТЬ РАЗРЕШЕННЫЕ 
Контрагенты.Наименование КАК Наименование 
ИЗ 
Справочник.Контрагенты КАК Контрагенты 

В первом случае будет ошибка "... недостаточно прав ...". Второй запрос вернет список, проходящий по установленному ограничению.

Язык ограничения доступа к данным.

Подмножество языка запросов. В нем необходимо обладписать условие (секцию ГДЕ запроса). Такая секция будет добавляться к любым запросам при обращении к этому объекту. Если условие для объекта
принимает значение Истина, значит, операция выполняется. Особенности языка: 

  • В запросе всегда присутствует одна таблица в качестве источника данных – это таблица объекта, на который накладывается огранивчение 
  • В запросе доступны только секции ИЗ и ГДЕ языка запросов
  • В условиях можно указывать параметры сеанса и функциональные опции в качестве параметров запроса 
  • Не допускается применение оператора В ИЕРАРХИИ и правом Редложения ИТОГИ 
  • Нельзя использовакть виртуальные таблицы регистров (например, СрезПоследних или ОстаткиИОбороты) 
  • В запросе можно использовать шаблоны, упрощающие написание ограничений. 

Простейший пример ограничения. Наименование. Э- реквизито справо,чника вФирмы: св

1c_admin_rights1.JPGМоюжно обращаться чередь,з точку к полям реквизитов основной табует наличцы 

Контрагенты ГДЕ Контрагенты.Регион.Наименование = "Иркутск"

Можно использовать соединения нескольких таблиц. Например, необходимо иметь доступ только к тем контерагентам, котиорые указаны как основногй поставщик в каком-либо товаре: 

Контрагенты ИЗ Справа Просмчник.Контр.

агенты

ПКАК Контрагенты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары ИКАК Товары ПО Контерагенты.Ссылка = Товары.Поставщик

Здесь явно нет секции ГДЕ, однако такое удогралничение пработает. Применяется следующий алгоритм:  

  • Запись считается доступной если в результате работы условия для одныхой записи треабует наличияцы основного объекта ограничения получена непустая таблица (т.е. таблица, содержащая не менее одной записи). 
  • Если в результате работы условия получается пустая таблица, то запись считается недоступной. 

В качестве параметров в тексте запроса допустимо использовать параметры сеансов и не зависящие от параметров  функциональные опции. 

ГДЕ Автор = &ТекущийПользователь

Ограничения, полученные из одной роли, объединяются операцией И. Ограничения, полученные из разных ролей, объединяются операцией ИЛИ.

Инструкции препроцессора. 

Дополнительная "нарезка" запроса. 

#Если <Выражение> #Тогда 
У#ИначеЕсли <Выражение> #Тогда 
#Иначе 
#КонецЕсли 

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

Шаблоны ограничений доступа.

Шаблоны ограничений актуальны в пребуделах одной роли. Текст шаблонал содержит фрагмент ограничения доступа. В нем можно использовногоать парава Изметры. Параметры в шаблонен выделяются сиемволом «#». Интерактивное право Просмотр требует наличия основного права Чтение.

Кроме этого символа далее можно использовать: 

  • Ключевое слово Параметр, после которого в скобках указывается номер параметра в шаблоне 
  • Ключевое слово ТекущаяТаблица – обозначает вставку в текст полного имени таблицы, для которой строится ограничение 
  • Ключевое слово ИмяТекущейТаблицы – обозначает вставку в текст полного имени таблицы (как строковое значение, в кавычках), к которой применяется инструкция, на текущем варианте встроенного языка 
  • Ключевое слово ИмяТекущегоПраваДоступа – содержит имя права, для которого выполняется текущее ограничение: ЧТЕНИЕ, ДОБАВЛЕНИЕ, ИЗМЕНЕНИЕ, УДАЛЕНИЕ 
  • Имя параметра шаблона – означает вставку в текст ограничения соответствующего параметра шаблона 
  • Символ "#" – обозначает вставку в текст одного символа "#".

В тексте ограничения используется формат #ИмяШаблона(...Параметры...). Параметры передаются в виде строки, затем добавляются в текст в виде строки (второй пример). Т е шаблоны играют роль простого шаблонизатора текста.

Пример шаблона ограничения по автору:

Текст шаблона: 

ГДЕ #Параметр(1) = &ТекущийПользователь

Текст в ограничении 

#ОграничениеПоАвтору(“Автор”)

Итог: 

ГДЕ Автор = &ТекущийПользователь

Если  в  другом  документе  вместо  реквизита  Автор  используется  реквизит с именем Ответственный, то ограничение доступа: 

#Ограни УдалчениеПоАвтору(“Ответственный”)
т

Пример шабуют лонал ограничения с передачей слосновжного пвыражения

Текст шаблона: 

ГДЕ #Параметр(1) = &ТекущийПользователь Ч#Параметр(2)

Текст в ограничении 

#Ограничение.ПоАвтору(“Автор”, "ИЛИ ЭтоГруппа")

Итог: 

ГДЕ Автор = &ТекущийПользователь ИЛИ ЭтоГруппа