ГруппыЗначенийДоступаРазрешающиеИзменениеЗначенийДоступа (БСП)

Автор: 1С
ОбщийМодуль.УправлениеДоступом
БСП

Группы значений доступа разрешающие изменение значений доступа. Возвращает массив групп значений доступа, разрешающих изменять значения доступа.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПустыеСсылкиТиповЗначенийДоступаПоТипамГруппИЗначений (БСП)

ПриСозданииФормыЗначенияДоступа (БСП)

ЗначенияДоступаПриИзменении (БСП)

ТипыГруппИЗначенийВидовДоступа (БСП)

ЗапланироватьОбновлениеДоступаПриИзмененииУчастниковГруппыДоступа (БСП)

ЗапланироватьОбновлениеДоступаПриИзмененииТаблицГруппДоступа (БСП)

ОбновитьГруппыЗначенийДоступа (БСП)

ОчиститьКэшЗначенийГруппДоступаДляРасчетаПрав (БСП)

РазрешенныеЗначенияДляДинамическогоСписка (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом