Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 355

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Дескриптор = ПолучитьДескрипторДоступа(ОбъектДоступа, Немедленно);

// Сохранение соответствия объекта доступа и его дескриптора

РегистрыСведений.ДескрипторыДоступаДляОбъектов.Сохранить(Дескриптор.Ссылка, ОбъектДоступа.Ссылка);

Возврат Дескриптор;

КонецФункции

// Определяет дескриптор доступа для указанного владельца файла

// При необходимости создает новый дескриптор, привязывает его к дескриптору

// владельца файла и вычисляет права

Функция ОпределитьДескрипторДоступаФайлаПоВладельцу(ВладелецФайла) Экспорт

УстановитьПривилегированныйРежим(Истина);

// Получение ссылки на подходящий дескриптор

Дескриптор = ПолучитьДескрипторДоступаФайла(ВладелецФайла);

Возврат Дескриптор;

КонецФункции

// Определяет дескриптор(ы) доступа для указанного набора записей

// При необходимости создает новый дескриптор и вычисляет права

Функция ОпределитьДескрипторДоступаНабораЗаписей(НаборЗаписей, Немедленно = Ложь) Экспорт

УстановитьПривилегированныйРежим(Истина);

МетаданныеНабораЗаписей = НаборЗаписей.Метаданные();

ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеНабораЗаписей);

Для каждого Запись Из НаборЗаписей Цикл

Дескриптор = ПолучитьДескрипторДоступаЗаписиНабораЗаписей(

ИдентификаторОбъектаМетаданных,

Запись,

Немедленно);

КонецЦикла;

Возврат Дескриптор;

КонецФункции

// Копирует права указанного объекта в указанные ПраваДоступа

Процедура СкопироватьПраваОбъекта(ОбъектДоступа, ПраваДоступа) Экспорт

УстановитьПривилегированныйРежим(Истина);

Для Каждого Эл из ПраваДоступа Цикл

ВызватьИсключение НСтр("ru = 'Для копирования прав объекта указан не пустой набор прав.'");

КонецЦикла;

ДескрипторДоступа = РегистрыСведений.ДескрипторыДоступаДляОбъектов.НайтиДескрипторДляОбъекта(ОбъектДоступа);

Если ЗначениеЗаполнено(ДескрипторДоступа) Тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПраваПоДескрипторамДоступа.Добавление,

| ПраваПоДескрипторамДоступа.Изменение,

| ПраваПоДескрипторамДоступа.Удаление,

| ПраваПоДескрипторамДоступа.УправлениеПравами,

| ПраваПоДескрипторамДоступа.Чтение,

| ПраваПоДескрипторамДоступа.Пользователь

|ИЗ

| РегистрСведений.ПраваПоДескрипторамДоступа КАК ПраваПоДескрипторамДоступа

|ГДЕ

| ПраваПоДескрипторамДоступа.Дескриптор = &Дескриптор";

Запрос.УстановитьПараметр("Дескриптор", ДескрипторДоступа);


Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

ПраваПользователя = Новый Структура("Чтение, Добавление, Изменение, Удаление, УправлениеПравами");

ПраваПользователя.Чтение = ВыборкаДетальныеЗаписи.Чтение;

ПраваПользователя.Добавление = ВыборкаДетальныеЗаписи.Изменение; // По умолчанию право добавления не отличается от права изменения

ПраваПользователя.Изменение = ВыборкаДетальныеЗаписи.Изменение;

ПраваПользователя.Удаление = ВыборкаДетальныеЗаписи.Изменение; // По умолчанию право удаления не отличается от права изменения

ПраваПользователя.УправлениеПравами = ВыборкаДетальныеЗаписи.УправлениеПравами;

ПраваДоступа.Вставить(ВыборкаДетальныеЗаписи.Пользователь, ПраваПользователя);

КонецЦикла;

КонецЕсли;

КонецПроцедуры

// Копирует права указанного дескриптора в указанные ПраваДоступа

Процедура СкопироватьПраваДескриптора(ДескрипторДоступа, ПраваДоступа) Экспорт

УстановитьПривилегированныйРежим(Истина);

Для Каждого Эл из ПраваДоступа Цикл

ВызватьИсключение НСтр("ru = 'Для копирования прав объекта указан не пустой набор прав.'");

КонецЦикла;

Если ЗначениеЗаполнено(ДескрипторДоступа) Тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПраваПоДескрипторамДоступа.Добавление,

| ПраваПоДескрипторамДоступа.Изменение,

| ПраваПоДескрипторамДоступа.Удаление,

| ПраваПоДескрипторамДоступа.УправлениеПравами,

| ПраваПоДескрипторамДоступа.Чтение,

| ПраваПоДескрипторамДоступа.Пользователь

|ИЗ

| РегистрСведений.ПраваПоДескрипторамДоступа КАК ПраваПоДескрипторамДоступа

|ГДЕ

| ПраваПоДескрипторамДоступа.Дескриптор = &Дескриптор";

Запрос.УстановитьПараметр("Дескриптор", ДескрипторДоступа);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

ПраваПользователя = Новый Структура("Чтение, Добавление, Изменение, Удаление, УправлениеПравами");

ПраваПользователя.Чтение = ВыборкаДетальныеЗаписи.Чтение;

ПраваПользователя.Добавление = ВыборкаДетальныеЗаписи.Изменение; // По умолчанию право добавления не отличается от права изменения

ПраваПользователя.Изменение = ВыборкаДетальныеЗаписи.Изменение;

ПраваПользователя.Удаление = ВыборкаДетальныеЗаписи.Изменение; // По умолчанию право удаления не отличается от права изменения


ПраваПользователя.УправлениеПравами = ВыборкаДетальныеЗаписи.УправлениеПравами;

ПраваДоступа.Вставить(ВыборкаДетальныеЗаписи.Пользователь, ПраваПользователя);

КонецЦикла;

КонецЕсли;

КонецПроцедуры

// Умножает структуру прав доступа для указанных объектов для всех пользователей

Функция УмножитьПраваОбъектов(ОбъектыДоступа) Экспорт

УстановитьПривилегированныйРежим(Истина);

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПраваПоДескрипторамДоступа.Добавление,

| ПраваПоДескрипторамДоступа.Изменение,

| ПраваПоДескрипторамДоступа.Удаление,

| ПраваПоДескрипторамДоступа.УправлениеПравами,

| ПраваПоДескрипторамДоступа.Чтение,

| ПраваПоДескрипторамДоступа.Пользователь

|ПОМЕСТИТЬ ПраваВременная

|ИЗ

| РегистрСведений.ПраваПоДескрипторамДоступа КАК ПраваПоДескрипторамДоступа

| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДескрипторыДоступаДляОбъектов КАК ДескрипторыДоступаДляОбъектов

| ПО ПраваПоДескрипторамДоступа.Дескриптор = ДескрипторыДоступаДляОбъектов.Дескриптор

|ГДЕ

| ДескрипторыДоступаДляОбъектов.Объект В(&ОбъектыДоступа)

|

|ИНДЕКСИРОВАТЬ ПО

| ПраваПоДескрипторамДоступа.Пользователь

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ПраваВременная.Пользователь,

| КОЛИЧЕСТВО(ПраваВременная.Добавление) КАК ЧислоРазрешенных

|ПОМЕСТИТЬ ПраваДобавлениеВременная

|ИЗ

| ПраваВременная КАК ПраваВременная

|ГДЕ

| ПраваВременная.Добавление

|

|СГРУППИРОВАТЬ ПО

| ПраваВременная.Пользователь

|

|ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ПраваВременная.Добавление) = &КоличествоЗаписей

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ПраваВременная.Пользователь,

| КОЛИЧЕСТВО(ПраваВременная.Изменение) КАК ЧислоРазрешенных

|ПОМЕСТИТЬ ПраваИзменениеВременная

|ИЗ

| ПраваВременная КАК ПраваВременная

|ГДЕ

| ПраваВременная.Изменение

|

|СГРУППИРОВАТЬ ПО

| ПраваВременная.Пользователь

|

|ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ПраваВременная.Изменение) = &КоличествоЗаписей

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ПраваВременная.Пользователь,

| КОЛИЧЕСТВО(ПраваВременная.Удаление) КАК ЧислоРазрешенных

|ПОМЕСТИТЬ ПраваУдалениеВременная

|ИЗ

| ПраваВременная КАК ПраваВременная

|ГДЕ

| ПраваВременная.Удаление

|

|СГРУППИРОВАТЬ ПО

| ПраваВременная.Пользователь


|

|ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ПраваВременная.Удаление) = &КоличествоЗаписей

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ПраваВременная.Пользователь,

| КОЛИЧЕСТВО(ПраваВременная.УправлениеПравами) КАК ЧислоРазрешенных

|ПОМЕСТИТЬ ПраваУправлениеПравамиВременная

|ИЗ

| ПраваВременная КАК ПраваВременная

|ГДЕ

| ПраваВременная.УправлениеПравами

|

|СГРУППИРОВАТЬ ПО

| ПраваВременная.Пользователь

|

|ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ПраваВременная.УправлениеПравами) = &КоличествоЗаписей

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ПраваВременная.Пользователь,

| КОЛИЧЕСТВО(ПраваВременная.Чтение) КАК ЧислоРазрешенных

|ПОМЕСТИТЬ ПраваЧтениеВременная

|ИЗ

| ПраваВременная КАК ПраваВременная

|ГДЕ

| ПраваВременная.Чтение

|

|СГРУППИРОВАТЬ ПО

| ПраваВременная.Пользователь

|

|ИМЕЮЩИЕ

| КОЛИЧЕСТВО(ПраваВременная.Чтение) = &КоличествоЗаписей

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ РАЗЛИЧНЫЕ

| ПраваВременная.Пользователь,

| ВЫБОР

| КОГДА ПраваДобавлениеВременная.Пользователь ЕСТЬ NULL

| ТОГДА ЛОЖЬ

| ИНАЧЕ ИСТИНА

| КОНЕЦ КАК Добавление,

| ВЫБОР

| КОГДА ПраваИзменениеВременная.Пользователь ЕСТЬ NULL

| ТОГДА ЛОЖЬ

| ИНАЧЕ ИСТИНА

| КОНЕЦ КАК Изменение,

| ВЫБОР

| КОГДА ПраваУправлениеПравамиВременная.Пользователь ЕСТЬ NULL

| ТОГДА ЛОЖЬ

| ИНАЧЕ ИСТИНА

| КОНЕЦ КАК Удаление,

| ВЫБОР

| КОГДА ПраваУдалениеВременная.Пользователь ЕСТЬ NULL

| ТОГДА ЛОЖЬ

| ИНАЧЕ ИСТИНА

| КОНЕЦ КАК УправлениеПравами,

| ВЫБОР

| КОГДА ПраваЧтениеВременная.Пользователь ЕСТЬ NULL

| ТОГДА ЛОЖЬ

| ИНАЧЕ ИСТИНА

| КОНЕЦ КАК Чтение

|ИЗ

| ПраваВременная КАК ПраваВременная

| ЛЕВОЕ СОЕДИНЕНИЕ ПраваДобавлениеВременная КАК ПраваДобавлениеВременная

| ПО (ПраваДобавлениеВременная.Пользователь = ПраваВременная.Пользователь)

| ЛЕВОЕ СОЕДИНЕНИЕ ПраваИзменениеВременная КАК ПраваИзменениеВременная

| ПО (ПраваИзменениеВременная.Пользователь = ПраваВременная.Пользователь)

| ЛЕВОЕ СОЕДИНЕНИЕ ПраваУдалениеВременная КАК ПраваУдалениеВременная

| ПО (ПраваУдалениеВременная.Пользователь = ПраваВременная.Пользователь)

| ЛЕВОЕ СОЕДИНЕНИЕ ПраваУправлениеПравамиВременная КАК ПраваУправлениеПравамиВременная

| ПО (ПраваУправлениеПравамиВременная.Пользователь = ПраваВременная.Пользователь)


| ЛЕВОЕ СОЕДИНЕНИЕ ПраваЧтениеВременная КАК ПраваЧтениеВременная

| ПО (ПраваЧтениеВременная.Пользователь = ПраваВременная.Пользователь)

|ГДЕ

| (НЕ ПраваДобавлениеВременная.Пользователь ЕСТЬ NULL

| ИЛИ НЕ ПраваИзменениеВременная.Пользователь ЕСТЬ NULL

| ИЛИ НЕ ПраваУправлениеПравамиВременная.Пользователь ЕСТЬ NULL

| ИЛИ НЕ ПраваУдалениеВременная.Пользователь ЕСТЬ NULL

| ИЛИ НЕ ПраваЧтениеВременная.Пользователь ЕСТЬ NULL )";

Запрос.УстановитьПараметр("ОбъектыДоступа", ОбъектыДоступа);

Запрос.УстановитьПараметр("КоличествоЗаписей", ОбъектыДоступа.Количество());

Результат = Запрос.Выполнить().Выгрузить();

Возврат Результат;

КонецФункции

// Удаляет все данные, связанные с правами доступа

// Используется для полного обновления прав доступа ко всем данным информационной базы

Процедура УдалитьВсеДанныеОПравахДоступа(ЭтоФоновоеЗадание = Ложь) Экспорт

УстановитьПривилегированныйРежим(Истина);

Если Не ЭтоФоновоеЗадание И Константы.ДокументооборотИспользоватьОтложенноеОбновлениеПравДоступа.Получить() Тогда

// Отключение регл. заданий

ЗаданиеОперативноеВключено = ОтключитьОбработкуОперативнойОчереди();

ЗаданиеДолгоеВключено = ОтключитьОбработкуДолгойОчереди();

// Удаление всех прав объектов

Набор = РегистрыСведений.ПраваПоДескрипторамДоступа.СоздатьНаборЗаписей();

Набор.Записать();

// Включение регл. заданий

Если ЗаданиеОперативноеВключено Тогда

ВключитьОбработкуОперативнойОчереди();

КонецЕсли;

Если ЗаданиеДолгоеВключено Тогда

ВключитьОбработкуДолгойОчереди();

КонецЕсли;

Возврат; // Остальные данные будут удалены фоновым заданием

КонецЕсли;

НачатьТранзакцию();

// Очистка очереди

РегистрыСведений.ОчередьОбновленияПравДоступа.Очистить();

// Удаление всех прав объектов

Набор = РегистрыСведений.ПраваПоДескрипторамДоступа.СоздатьНаборЗаписей();

Набор.Записать();

Набор = РегистрыСведений.ДескрипторыДоступаДляОбъектов.СоздатьНаборЗаписей();

Набор.Записать();

Выборка = Справочники.ДескрипторыДоступаОбъектов.Выбрать();

Пока Выборка.Следующий() Цикл

Объект = Выборка.ПолучитьОбъект();

Объект.Удалить();

КонецЦикла;

// Удаление всех прав файлов

НаборЗаписей = РегистрыСведений.ДескрипторыДоступаДляФайлов.СоздатьНаборЗаписей();

НаборЗаписей.Записать();

Выборка = Справочники.ДескрипторыДоступаФайлов.Выбрать();

Пока Выборка.Следующий() Цикл

Объект = Выборка.ПолучитьОбъект();