Оглавление:
Часть 1. Базовые права
Часть 2. Ограничение доступа к справочникам
Часть 3. Концепция ограничения доступа к дополнительным (внешним) обработкам
Исходя из первых двух частей статьи, может возникнуть вопрос: а как ограничить доступ к внешним обработкам? Например, выгрузку в ФИС, которую зачастую подключают как дополнительную внешнюю обработку и которую получается может открыть любой пользователь (у которого есть права на приемные кампании).
Так вот, используя способ 2, описанный во второй части статьи, можно ограничивать доступ к внешним обработкам, включая часть проверочного кода в код открытия их форм (предварительно добавив наименование обработки в справочник метаданных и назначив права на него).
Рассмотрим механизм на примере выгрузки заявлений в ФИС.
Первоначально добавляем объект "ВнешняяОбработка.ВыгрузкаЗаявленийАбитуриентовВФИС" в справочник "Объектов метаданных":
Добавляем ссылку на этот объект в группу защищаемых объектов (подробнее о группе во второй части статьи):
Далее в конфигураторе в код формы обработки в блок "ПриОткрытии" вставляем строку:
(расположение строки может меняться в зависимости от типа обработки, в некоторых случаях можно вставить ее сразу в начале процедуры "ПриОткрытии")
Также добавляем две функции в модуль формы: ПроверитьПравоНаОткрытие() и ПроверитьПравоНаОткрытиеОбработки(). Вот их код:
Для выгрузки в ФИС это может выглядеть примерно так:
Теперь, кроме администратора и пользователя с полными правами, никто не сможет открыть эту обработку, загруженную в справочник дополнительных обработок, и получит сообщение об ошибке:
Как уже было сказано ранее (в части 2 статьи), чтобы открыть доступ к данной обработке, даем на нее право пользователю или группе пользователей:
В данном примере, все пользователи, входящие в группу Секретари ПК, смогут открывать эту обработку.
Часть 1. Базовые права
Часть 2. Ограничение доступа к справочникам
Часть 3. Концепция ограничения доступа к дополнительным (внешним) обработкам
Исходя из первых двух частей статьи, может возникнуть вопрос: а как ограничить доступ к внешним обработкам? Например, выгрузку в ФИС, которую зачастую подключают как дополнительную внешнюю обработку и которую получается может открыть любой пользователь (у которого есть права на приемные кампании).
Так вот, используя способ 2, описанный во второй части статьи, можно ограничивать доступ к внешним обработкам, включая часть проверочного кода в код открытия их форм (предварительно добавив наименование обработки в справочник метаданных и назначив права на него).
Рассмотрим механизм на примере выгрузки заявлений в ФИС.
Первоначально добавляем объект "ВнешняяОбработка.ВыгрузкаЗаявленийАбитуриентовВФИС" в справочник "Объектов метаданных":
Добавляем ссылку на этот объект в группу защищаемых объектов (подробнее о группе во второй части статьи):
Далее в конфигураторе в код формы обработки в блок "ПриОткрытии" вставляем строку:
Отказ = ПроверитьПравоНаОткрытиеОбработки();
(расположение строки может меняться в зависимости от типа обработки, в некоторых случаях можно вставить ее сразу в начале процедуры "ПриОткрытии")
Также добавляем две функции в модуль формы: ПроверитьПравоНаОткрытие() и ПроверитьПравоНаОткрытиеОбработки(). Вот их код:
&НаСервере
Функция ПроверитьПравоНаОткрытие()
Если ВспомогательныеФункции.ТекущийПользовательСРольюПолныеПрава() Тогда
Возврат Ложь;
КонецЕсли;
ИмяОбъекта = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя();
РазрешитьОткрытие = ИСТИНА;
// проверяем, есть ли хотя бы одна ссылка
на объект права
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Истина
|ИЗ
| РегистрСведений.Роли КАК Роли
|ГДЕ
| Роли.Объект.Наименование = &Объект";
Запрос.УстановитьПараметр("Объект", ИмяОбъекта);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
РазрешитьОткрытие = ЛОЖЬ; //запрещаем, т.к. есть хотя бы одна запись с таким правом
Прервать;
КонецЦикла;
Если РазрешитьОткрытие = ЛОЖЬ Тогда
// проверяем, есть ли права на чтение
обработки у текущего пользователя
ЗапросПользователя = Новый Запрос;
ЗапросПользователя.Текст = "ВЫБРАТЬ
| Истина
|ИЗ
| РегистрСведений.Роли КАК Роли
|ГДЕ
| Роли.Объект.Наименование = &Объект
| И Роли.ЗначениеПрава = ИСТИНА
| И Роли.Право =
ЗНАЧЕНИЕ(Справочник.Права.Чтение)
| И (Роли.Пользователь =
&ТекущийПользователь
| ИЛИ Роли.Пользователь В (ВЫБРАТЬ Ссылка
| ИЗ
| Справочник.ГруппыПользователей.Состав
| ГДЕ
| Пользователь = &ТекущийПользователь))";
ЗапросПользователя.УстановитьПараметр("Объект", ИмяОбъекта);
ЗапросПользователя.УстановитьПараметр("ТекущийПользователь", ПараметрыСеанса.ТекущийПользователь);
ВыборкаДетальныеЗаписиЗапросПользователя = ЗапросПользователя.Выполнить().Выбрать();
Пока ВыборкаДетальныеЗаписиЗапросПользователя.Следующий() Цикл
РазрешитьОткрытие = ИСТИНА;
// разрешаем, т.к. есть хотя бы одна
запись с назначением
// права чтения текущего объекта текущему пользователю
Прервать;
КонецЦикла;
КонецЕсли;
Возврат НЕ РазрешитьОткрытие;
КонецФункции
&НаКлиенте
Функция ПроверитьПравоНаОткрытиеОбработки()
// проверяет, не ограничено ли право
доступа к обработке
// через администрирование прав объектов
метаданных
ОграничитьПрава = ПроверитьПравоНаОткрытие();
Если ОграничитьПрава Тогда
Предупреждение("Недостаточно прав для открытия элемента.
Обратитесь к администратору.", 0, "Внимание!");
КонецЕсли;
Возврат ОграничитьПрава;
КонецФункции
Для выгрузки в ФИС это может выглядеть примерно так:
Теперь, кроме администратора и пользователя с полными правами, никто не сможет открыть эту обработку, загруженную в справочник дополнительных обработок, и получит сообщение об ошибке:
Как уже было сказано ранее (в части 2 статьи), чтобы открыть доступ к данной обработке, даем на нее право пользователю или группе пользователей:
В данном примере, все пользователи, входящие в группу Секретари ПК, смогут открывать эту обработку.
(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.
Комментариев нет:
Отправить комментарий