Много кому в организации нужны права администрирования системы, например сотрудникам техподдержки - подправить документы, завести пользователей. Давать доступ в конфигуратор этим сотрудниками совсем не нужно, однако широкие права предполагают, что доступ в конфигуратор у них есть. Традиционно такие вопросы решаются административным путем, однако мы (повелители 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