Архив рубрики: Пользователь, роль доступа, интерфейс

Пользователь, роль доступа, интерфейс

Как выполнить код без проверки прав?

— Использовать привилегированный модуль
Размещение программного кода, который должен выполняться БЕЗ КОНТРОЛЯ ОГРАНИЧЕНИЙ, в общий модуль с установкой у модуля флага ПРИВИЛЕГИРОВАННЫЙ.
— Использовать привилегированный режим исполнения программного кода

Аналогичный режиму работы кода привилегированных модулей. Режим можно включить/выключить средствами встроенного языка:

Параметр <Включить> (обязательный)
Тип: Булево. Определяет, будет ли включен привилегированный режим:
Истина — включить режим;
Ложь — выключить режим.

Функция:

позволяет определить, включен привилегированный режим, или нет.

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

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

Смена пароля у всех пользователей, у которых отсутствует пароль

Ограничение доступа на уровне записей RLS

Когда требуется более тонкая настройка доступа, на помощь приходит механизм RLS — Record Level Security.

Конфигурации системы «1С:Предприятие» 8 изначально позиционировалась как программа для многофирменного учета, и один из первых возникающих вопросов – как бы сделать так, что бы пользователь видел только те данные, которые ему положено видеть, и никакие другие? Конечно, есть роли, с помощью которых можно разрешить или запретить то или иное действие над объектом конфигурации, есть интерфейсы, позволяющие минимизировать пункты меню. Но как быть в случае, когда к одному и тому же объекту конфигурации нужно организовать «интеллектуальный» доступ, скрывающий только определенный записи? Ярким примером служит справочник «Организации»: учет в базе ведется по нескольким фирмам, справочник физически один, документы по фирмам ведутся одни и те же. Понятно, что в этом случае в назначенных ролях пользователя нельзя просто убрать права на чтение и просмотр, нужна более детальная настройка — RLS.

Ограничения RLS можно задавать для следующих действий над объектами базы данных:
— Чтение – получение записей из таблицы базы данных;
— Добавление – добавление новых записей без изменения существующих;
— Изменение – изменение существующих записей;
— Удаление – удаление некоторых записей без внесения изменений в другие.

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

В качестве переменных в запросах RLS используются специальные объекты конфигурации – параметры сеанса. Кроме привычных типов объектов, тип параметра может быть такжеNULL, УникальныйИдентификатор, ФиксированныйМассив, ВидДвиженияНакопления и др. Особо хочется отметить тип ХранилищеЗначений, позволяющий хранить разнородные данные в одном параметре (например, ОбщиеЗначения). Значения параметров сеанса обычно задается в процедуре ПриНачалеРаботыСистемы.

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

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

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

Платформа 1С в явном виде не предоставляет возможность отладки работы механизма RLS, но тем ни менее сделать это вполне реально. Для этого можно воспользоваться универсальной консолью отчетов (версия не ниже 2.6.9.2), на закладке «Данные» у которой есть функция «Выполнить от имени». Обработка создаст COM-соединение с помощью указанного имени пользователя и пароля, и выдаст результат выполнения запроса в консоль.

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

Как получить Имя Пользователя?



Отключение Пользователей встроенными в платформу функциями

Нужно создать ярлыки(в любой папке щелкните правой клавишей мыши — Создать — Ярлык) с командами:

Отключение или Завершение работы пользователей:

Для Файлового варианта:
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F <путь к базе> /N <имя> /P <пароль> /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
При этом произойдет запуск программы под админскими правами пользователя <имя>, а на экране других выйдет сообщение, оповещающее об отключении. Сам пользователь <имя> отключится тоже через 60 сек.
Рабочий пример:
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /FD:\FileBases\myDB\ /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /CЗавершитьРаботуПользователей

Для Серверного варианта:
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /S <Сервер БД\База> /N <имя> /P <пароль> /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
Рабочий пример:
"C:\Program Files (x86)\1cv81\bin\1cv8.exe" ENTERPRISE /SSQLSRV\MyDB /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /CЗавершитьРаботуПользователей

Разрешить работу пользователей:

Для Файлового варианта:
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F <путь к базе> /N <имя> /P <пароль> /WA- /AU- /DisableStartupMessages /C РазрешитьРаботуПользователей /UC ПакетноеОбновлениеКонфигурацииИБ

Рабочий пример:
"C:\Program Files (x86)\1cv81\bin\1cv8.exe" ENTERPRISE /FD:\FileBases\myDB\ /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /CРазрешитьРаботуПользователей /UCПакетноеОбновлениеКонфигурацииИБ

Для Серверного варианта:
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /S <Сервер БД\База> /N <имя> /P <пароль> /WA- /AU- /DisableStartupMessages /C РазрешитьРаботуПользователей /UC ПакетноеОбновлениеКонфигурацииИБ
Рабочий пример:
"C:\Program Files (x86)\1cv81\bin\1cv8.exe" ENTERPRISE /SSQLSRV\MyDB /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /CРазрешитьРаботуПользователей /UCПакетноеОбновлениеКонфигурацииИБ

Как получить список пользователей, которые работают с данной информационной базой?

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

Как программно добавить пользователя в информационную базу?

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

Добавление пользователя информационной базы

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

Вызов процедуры привилегированного модуля

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

Текст процедуры привилегированного модуля

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

Как принудительно завершить работу всех пользователей информационной базы?

Для этого можно воспользоваться возможностью программного доступа к серверу 1С:Предприятия 8. Нужно создать COM-коннектор и выполнить метод ConnectWorkingProcess(), который позволяет подключиться к указанному серверу.
Затем следует аутентифицироваться с правами администратора в выбранной информационной базе, получить все клиентские соединения этой базы и разорвать их.
Завершение работы пользователей

Вывод информации о программе, Пользователе, Интерфейсе, Правах и т.д