Пользователи и роли
После добавления роли, нужно обновить БД клавишей F7 чтобы роль отобразилась в списке ролей пользователей.
Ролевая модель доступа. Роли независимые, один уровень. Иерархии ролей нет. Но уУ одного пользователя может быть несколько ролей. При нескольких ролях у пользователя приоритет разрешения. Если хотя бы в одной роли есть разрешение, то доступ будет разрешен, если во всех ролях есть запрещение, то доступ будет запрещен. Роли можно копировать.копировать для упрощения настроек.
&НаСервере
Процедура ПросмотретьРолиПользователяСервер()
СписокРолей = Новый Массив;
Роли = ПользователиИнформационнойБазы.ТекущийПользователь().Роли;
Для каждого роль из роли цикл
Сообщить(роль.Имя);
КонецЦикла
КонецПроцедуры
Права доступа настраиваются с точностью до объектазаписи конфигурациибазы данных (например у одного пользователя может быть доступ к одним записям справочника Контрагенты, у другого - к другим), В рамках формы настройка прав до уровня доступа к реквизитам, т е могут быть права на редактирование названия, но прав на редактирование табличной части может не будет.быть.
Все права можно разделитьделятся на две большие группы: основные и интерактивные. Основные права описывают(чтение, добавление, изменение, удаление): действия, выполняемые над элементами данных системы или над всей системой в целом, и проверяются всегда, независимо от способа обращения к данным. Интерактивные права описываютправа: действия, которые могут быть выполненывыполняющиеся пользователем интерактивно. Соответственно проверяются они толькоПроверяются при выполнении интерактивных операций стандартными способами,способами. причем вВ клиент-серверном варианте все проверки основных прав (кроме интерактивных) выполняются на сервере.сервере, интерактивных на клиенте.
Проверку интерактивных прав доступа можно обойти, если создать в конфигураторе собственную форму объекта и заменить стандартные команды собственными. Проверку основных прав обойти нельзя. Допускается установка основного права и сброс интерактивного, но не наоборот.
Основные и интерактивные права взаимосвязаны. Например,Взаимные существует основное право Удаление, которому соответствуют два интерактивных права: Интерактивное удаление и Интерактивное удаление помеченных. Если пользователю запрещено Удаление, то и все интерактивные «удаления» также будут запрещены для него. В то же время, если пользователю разрешено Интерактивное удаление помеченных, это значит, что Удаление ему также разрешается.
Кроме того, основные права могут зависеть друг от друга. В результате образуются довольно сложные цепочки взаимосвязей, которыесвязи отслеживаются системой автоматически:автоматически.
Иерархия прав
На уровне корневого элемента всей конфигурации устанавливается набор прав, определяющих для роли каким клиентским приложениям разрешен доступ к базе, разрешен ли доступ к журналу регистрации и т.д.
Неявное использование прав доступа и ускорение работы
Если необходимо часть действий выполнять без учета установленных ограничений, а полные права на эти объекты давать из соображений безопасности не стоит, следует вынести эти действия в привилегированные модули или явно включать и выключать привилегированный режим в соответствующих местах программного кода.
Объекты конфигурации могут выполнять обращения к некоторым полям базы данных неявно. При этом наложение
ограничений доступа выполняется способом «все», что может приводить к неожиданным сообщениям о нарушении прав доступа. Поэтому ограничивать доступ к таким полям нельзя.
Включение автонумерации или контроля уникальности номеров объектов приводит к неявному чтению поля Код (для документов, бизнес процессов и задач – Номер) при создании нового объекта и при его записи. Если в справочниках в качестве серии кодов выбрано «в пределах подчинения», то происходит неявное чтение полей Код, Родитель. Если используется иерархия групп и элементов, то кроме этого неявно считывается поле ЭтоГруппа. При выборе в качестве серии кодов «в пределах подчинения владельцу» неявно будет выполняться чтение полей Код и Владелец.
Если при записи документа, бизнес-процесса или задачи установлен режим автоматического определения времени, то при записи будет неявно выполняться чтение полей Дата и Ссылка. Поэтому чтение полей Дата и Ссылка должно быть разрешено.
Также рекомендуется проиндексировать реквизиты, которые используются в ограничениях доступа. Ускорение работы с использованием индексов достигается за счет того, что индекс имеет структуру, оптимизированную под поиск, например, сбалансированного дерева. Но индексы занимают дополнительный объем памяти, поэтому перед созданием индекса следует убедиться, что планируемый выигрыш в производительности запросов превысит дополнительную затрату ресурсов компьютера на поддержание индекса.
Использование нескольких таблиц и соединений в ограничениях доступа приводят к усложнению запроса. Поэтому рекомендуется реквизиты, на которые опирается определение доступности записей, включать в состав самого объекта конфигурации, а не обращаться к ним через точку. Это приведет к хранению избыточной информации, но
позволит увеличить скорость выполнения запроса.
Ограничения доступа на уровне записей базы данных
Использовать в случае крайней необходимости!
Механизм RLS (Record Level Security). Нагружает систему дополнительными запросами.
Настраивается только для основных прав. Для регистров накопления, бухгалтерского учета и расчета условия позволяют разграничить доступ по значениям измерений (для регистров бухгалтерского учета по балансовым измерениям), а для объектных данных и регистров сведений условия позволяют разграничивать доступ к данным по любым полям.
Для операций изменения, добавления и удаления можно задать только одно условие, а для операции чтения можно задать несколько ограничений доступа на уровне записей.
Способы настройки ограничений:
| <Прочие поля> | Конкретное имя поля | |
| Способ установки ограничения | На всю запись | На отдельное поле записи |
| Использование при запросе | Будет накладываться для всех полей объекта, кроме полей, для которых ограничения заданы явным образом | Условие будет накладываться только в том случае, если в запросе присутствует поле, для которого задано ограничение |
Данные могут быть выбраны из базы запросом или при помощи объектной техники. При использовании объектного чтения объект всегда будет считан из базы целиком. При использовании запроса есть возможность явно указать только необходимые поля, поэтому если в запрос не попадут поля с ограничениями, то данные записей будут предоставлены. Есть дополнительная деталь. Существует два способа функционирования ограничений доступа:
- Все. Операция должна быть выполнена над всеми подразумеваемыми данной операцией объектами базы данных. Если при выполнении такой операции должны быть прочитаны или изменены объекты базы данных, для которых не выполняются соответствующие ограничения доступа, то операция завершается аварийно из-за нарушения прав доступа
- Разрешенные. При выполнении операции над данными должны быть прочитаны только те объекты базы данных, которые удовлетворяют соответствующим ограничениям доступа. Объекты базы данных, не удовлетворяющие ограничениям доступа, при выполнении такой операции считаются отсутствующими и на результат операции не влияют.
При отображении динамических списков используется способ «Разрешенные», а при получении объектов средствами встроенного языка и при записи объектов в базу данных применяется способ «Все». В запросах способом функционирования ограничений можно управлять. Если в тексте запроса используется ключевое слово РАЗРЕШЕННЫЕ, то работа ограничений выполняется в соответствии с одноименным способом, в противном случае используется способ «Все».
Пример отличия в исполнении запроса в режиме ВСЕ и в режиме РАЗРЕШЕННЫЕ. В таблице есть поле Контрагенты, на него установлено ограничение на наименование. Есть и как толькозаписи разработчикс снимаетданным разрешениенеименованием, так и
Текст первого запроса:
ВЫБРАТЬ
Контрагенты.Наименование КАК Наименование
ИЗ
Справочник.Контрагенты КАК Контрагенты
Текст второго запроса
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Контрагенты.Наименование КАК Наименование
ИЗ
Справочник.Контрагенты КАК Контрагенты
В первом случае будет ошибка "... недостаточно прав ...". Второй запрос вернет список, проходящий по установленному ограничению.
Язык ограничения доступа к данным.
Подмножество языка запросов. В нем необходимо описать условие (секцию ГДЕ запроса). Такая секция будет добавляться к любым запросам при обращении к этому объекту. Если условие для объекта
принимает значение Истина, значит, операция выполняется. Особенности языка:
- В запросе всегда присутствует одна таблица в качестве источника данных – это таблица объекта, на
какое-который накладывается ограничение - В запросе доступны только секции ИЗ и ГДЕ языка запросов
- В условиях можно указывать параметры сеанса и функциональные опции в качестве параметров запроса
- Не допускается применение оператора В ИЕРАРХИИ и предложения ИТОГИ
- Нельзя использовать виртуальные таблицы регистров (например, СрезПоследних или ОстаткиИОбороты)
- В запросе можно использовать шаблоны, упрощающие написание ограничений.
Простейший пример ограничения. Наименование - реквизит справочника Фирмы:
Можно обращаться через точку к полям реквизитов основной таблицы
Контрагенты ГДЕ Контрагенты.Регион.Наименование = "Иркутск"
Можно использовать соединения нескольких таблиц. Например, необходимо иметь доступ только к тем контрагентам, которые указаны как основной поставщик в каком-либо право,товаре: система
Контрагенты снимаетИЗ разрешенияСправочник.Контрагенты КАК Контрагенты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Справочник.Товары КАК Товары
ПО
Контрагенты.Ссылка = Товары.Поставщик
Здесь явно нет секции ГДЕ, однако такое ограничение работает. Применяется следующий алгоритм:
- Запись считается доступной если в результате работы условия для одной записи таблицы основного объекта ограничения получена непустая таблица (т.е. таблица, содержащая не менее одной записи).
- Если в результате работы условия получается пустая таблица, то запись считается недоступной.
В качестве параметров в тексте запроса допустимо использовать параметры сеансов и не зависящие от параметров функциональные опции.
ГДЕ Автор = &ТекущийПользователь
Ограничения, полученные из одной роли, объединяются операцией И. Ограничения, полученные из разных ролей, объединяются операцией ИЛИ.
Инструкции препроцессора.
Дополнительная "нарезка" запроса.
#Если <Выражение> #Тогда
#ИначеЕсли <Выражение> #Тогда
#Иначе
#КонецЕсли
Выражения должны иметь тип Булево. В них можно использовать параметры сеанса. В зависимости от истинности, в текст запроса будет включено то или иное выражение. Если текст ограничения доступа содержит инструкции препроцессора, то его нельзя редактировать при помощи конструктора.
Шаблоны ограничений доступа.
Шаблоны ограничений актуальны в пределах одной роли. Текст шаблона содержит фрагмент ограничения доступа. В нем можно использовать параметры. Параметры в шаблоне выделяются символом «#». После этого символа далее можно использовать:
- Ключевое слово Параметр, после которого в скобках указывается номер параметра в шаблоне
- Ключевое слово ТекущаяТаблица – обозначает вставку в текст полного имени таблицы, для которой строится ограничение
- Ключевое слово ИмяТекущейТаблицы – обозначает вставку в текст полного имени таблицы (как строковое значение, в кавычках), к которой применяется инструкция, на
всетекущем варианте встроенного языка - Ключевое слово ИмяТекущегоПраваДоступа – содержит имя права,
которыедлязависяткоторогоотвыполняетсяэтоготекущееправа.ограничение:ИЧТЕНИЕ,наоборот,ДОБАВЛЕНИЕ,приИЗМЕНЕНИЕ,установкеУДАЛЕНИЕкакого-либо - Имя
разработчиком,параметрасистемашаблонасама–устанавливаетозначаетвсевставкуправа,воттексткоторыхограниченияэтосоответствующегоправопараметразависит.шаблона - Символ "#" – обозначает вставку в текст одного символа "#".
В тексте ограничения используется формат #ИмяШаблона(...Параметры...). Параметры передаются в виде строки, затем добавляются в текст в виде строки (второй пример). Т е шаблоны играют роль простого шаблонизатора текста.
Например,Пример дляшаблона того,ограничения чтобыпо пользовательавтору:
Текст правошаблона: Итерактивное
ГДЕ помеченных,#Параметр(1) ему= необходимо&ТекущийПользователь
Текст в своюограничении очередь,
#ОграничениеПоАвтору(“Автор”)
Итог: интерактивного
ГДЕ Просмотр.Автор = &ТекущийПользователь
Если в другом документе вместо реквизита Автор используется реквизит с именем Ответственный, то ограничение доступа:
#ОграничениеПоАвтору(“Ответственный”)
Пример шаблона ограничения с передачей сложного выражения
ПравоТекст Интерактивноешаблона: удаление помеченных требует наличия основного права Удаление. Интерактивное право Редактирование требует наличия основного права Изменение. Интерактивное право Просмотр требует наличия основного права Чтение.
ГДЕ #Параметр(1) = &ТекущийПользователь #Параметр(2)
КромеТекст этогов основныеограничении права
#ОграничениеПоАвтору(“Автор”, и"ИЛИ УдалениеЭтоГруппа")
Итог: наличия
ГДЕ праваАвтор Чтение.= &ТекущийПользователь ИЛИ ЭтоГруппа