Запрещаем администратору системы заходить в конфигуратор (внешнее управление сеансами)
Используем функционал внешнего управления сеансами для запрета входа в конфигуратор рабочей базы пользователя с правом администрирования.
- Описание
- Подробнее
Описание
Много кому в организации нужны права администрирования системы, например сотрудникам техподдержки — подправить документы, завести пользователей. Давать доступ в конфигуратор этим сотрудниками совсем не нужно, однако широкие права предполагают, что доступ в конфигуратор у них есть. Традиционно такие вопросы решаются административным путем, однако мы (повелители 1С) можем кое-что сделать и не административно.
Воспользуемся внешним управлением сеансами — эта технология в настоящий момент доступна только для КОРП лицензии, к сожалению, и представляет из себя возможность клиентского сеанса обращаться к специальному веб-сервису, который предоставляет информацию о разрешении входа.
Ознакомимся с информацией от вендора: 2.2.4.4. Внешнее управление сеансами и 5.3.2. Внешнее управление сеансами, ознакомимся также с наработками сообщества: Готовая конфигурация по примеру…, Брандмауэр для сервера 1С…, Внешнее управление сеансами
Создадим пустую конфигурацию. Добавим в нее справочник — "НастройкиВхода", название базы для контроля сеансов будем задавать в наименовании элемента справочника. Добавим табличную часть — "РазрешенныеПользователиКонфигуратора", с единственным реквизитом — "ИмяПользователя".
Дальше создаем XDTO пакет импортом схемы с ИТС (вышеупомянутая глава 5.3.2. Внешнее управление сеансами)
Получаем пакет описания типов веб-сервиса:
Создаем веб-сервис "SessionControl" с указанием только что созданного пакета XDTO:
Реализуем операции веб-сервиса и параметры операций, для описания параметров используем ту же статью ИТС.
Обратите внимание, для наших целей нам достаточно только операции "onStartSession", остальные методы сделаны в виде "заглушки".
Ну и реализуем обработчик операции "onStartSession":
Напишем такой код:
Функция onStartSession(CallNo, ClusterID, ClusterName, InfoBaseName, SessionID, SessionNumber, UserID, UserName, ClientIPAddress, AppID, Zone, LanguageCode, ErrorDescription)
ErrorDescription = "";
Если AppID <> "Designer" Тогда
Возврат 0;
КонецЕсли;
НастройкиВхода = Справочники.НастройкиВхода.НайтиПоНаименованию(InfoBaseName, Истина);
Если НастройкиВхода.Пустая() Тогда
Возврат 0;
КонецЕсли;
ПараметрыОтбора = Новый Структура("ИмяПользователя", UserName);
Если НЕ ЗначениеЗаполнено(НастройкиВхода.РазрешенныеПользователиКонфигуратора.НайтиСтроки(ПараметрыОтбора)) Тогда
ErrorDescription = СтрШаблон("Пользователю '%1' не разрешен вход в конфигуратор", UserName);
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Из всего обилия параметров веб-сервиса мы используем только "AppID" — вид приложения, "InfoBaseName" — имя информационной базы, "UserName" — имя пользователя.
Логика следующая — проверка срабатывает, только если приложение — конфигуратор и в справочнике есть запись с именем базы. Далее мы ищем совпадение имени пользователя с строками табличной части, если совпадения нет — пользователю нельзя заходить в конфигуратор.
Опубликуем наш веб-сервис в веб:
И пропишем в настройках серверной базы адрес веб-сервиса:
Единственное отступление от инструкции на ИТС — мне пришлось явно указать версию веб-сервиса ("wsver=3") и добавить параметр "ErrorDescription". Получилась следующая строка, где localhost — это имя веб-сервера (у меня тестовый конечно), Control — имя публикации (базы), SessionControl — имя веб-сервиса:
wsdl=http://localhost/Control/ws/SessionControl?wsdl;ns=http://v8.1c.ru/SessionManagement;srvc=SessionControl;port=SessionControlSoap;wsver=3;ErrorDescription=""
База, в которой будем ограничивать вход пользователей, называется RPA (привет тем, кто знает!). Пусть вход в конфигуратор разрешен только пользователю "АдминистраторКонфигуратора".
Сделаем нужную запись в конфигурации — держателе веб-сервиса.
Попробуем. Работает! Пользователю "АдминистраторКонфигуратора" можно заходить в конфигуратор, остальным нет, причем остальные получают понятное сообщение об ошибке.
Получилось быстро и просто.
К публикации приложена выгрузка конфигурации. Все действия проводились на платформе 8.3.18.1208