По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)А как насчет "ВЫБРАТЬ РАЗРЕШЕННЫЕ" в запросе?
Извиняюсь...15-й раз прочитал, похоже это Вам не подойдет :-) стало доходить...что Вам нужен отбор динамического списка?
Я делал так
А может Вам нужно так....(видимо я плохо понимаю слово "ограничить")
Извиняюсь...15-й раз прочитал, похоже это Вам не подойдет :-) стало доходить...что Вам нужен отбор динамического списка?
Я делал так
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьОтборПоОтветственному()
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборПоОтветственному()
Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя);
ОтветственныйДляОтображения = Справочники.Сотрудники.НайтиПоНаименованию(Пользователь.ПолноеНаименование());
УстановитьМеткуИОтборСписка("Ответственный", "Менеджеры", ОтветственныйДляОтображения);
КонецПроцедуры
ПоказатьА может Вам нужно так....(видимо я плохо понимаю слово "ограничить")
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если РольДоступна("ПолныеПрава") Тогда
Отказ = Истина;
КонецЕсли
КонецПроцедуры
Показать
(2) в самом динамическом списке надо чтото менять?
т.е. фактически он у меня сейчас без условия, надо ли добавлять?
т.е. фактически он у меня сейчас без условия, надо ли добавлять?
ВЫБРАТЬ
ДокументУП_ДокументДДС.Ссылка,
ДокументУП_ДокументДДС.ПометкаУдаления,
ДокументУП_ДокументДДС.Номер,
ДокументУП_ДокументДДС.Дата,
ДокументУП_ДокументДДС.Проведен
ИЗ
Документ.УП_ДокументДДС КАК ДокументУП_ДокументДДС
Показать
(3)имея такие исходные могу предложить только
как то так склепал из того что было 6-)
осталось определить параметр
ПодставимОтбор = "";
Если Не РольДоступна("Руководитель") Тогда
ПодставимОтбор = "|ГДЕ
| ДокументУП_ДокументДДС.ВидОперации = &ВыплатаЗП"
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ВЫБРАТЬ
ДокументУП_ДокументДДС.Ссылка,
ДокументУП_ДокументДДС.ПометкаУдаления,
ДокументУП_ДокументДДС.Номер,
ДокументУП_ДокументДДС.Дата,
ДокументУП_ДокументДДС.Проведен
ИЗ
Документ.УП_ДокументДДС КАК ДокументУП_ДокументДДС
+ ПодставимОтбор
Показатькак то так склепал из того что было 6-)
осталось определить параметр
(10)
простите, есть вопрос
чтото никогда не пользовалась
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ РольДоступна("УП_Руководитель") Тогда
Список.Параметры.УстановитьЗначениеПараметра("ВидОперации", Перечисления.ВидыОперацийДДС.ВыплатаСотрудникам);
Список.Параметры.УстановитьЗначениеПараметра("РасчСч",*здесь надо задать в целом справочник расчетные счета, т.к. Значение параметра РасчСч - составной тип данных, и там есть еще справочник Касса, т.е. параметром РасчСч надо задать - видеть ТоЛЬКО расчетные счета, НЕ Кассу*);
КонецЕсли;
КонецПроцедуры
простите, есть вопрос
чтото никогда не пользовалась
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ РольДоступна("УП_Руководитель") Тогда
Список.Параметры.УстановитьЗначениеПараметра("ВидОперации", Перечисления.ВидыОперацийДДС.ВыплатаСотрудникам);
Список.Параметры.УстановитьЗначениеПараметра("РасчСч",*здесь надо задать в целом справочник расчетные счета, т.к. Значение параметра РасчСч - составной тип данных, и там есть еще справочник Касса, т.е. параметром РасчСч надо задать - видеть ТоЛЬКО расчетные счета, НЕ Кассу*);
КонецЕсли;
КонецПроцедуры
(2)
а что "Выбрать разрешенные" можно сделать на одно перечисление?
а кстати, так не пойдет, потому что к перечислению ВидыОперацийДДС.ВыплатаСотрудникам - имеет доступ типа все, как администраторы с полными правами, вообщем менять права пользователй крайне не желательно, но есть группа пользователей без Роли Руководитель, вот им нельзя смотреть документ ДокументУП_ДокументДДС с видом операции ВыплатаСотрудникам
а что "Выбрать разрешенные" можно сделать на одно перечисление?
а кстати, так не пойдет, потому что к перечислению ВидыОперацийДДС.ВыплатаСотрудникам - имеет доступ типа все, как администраторы с полными правами, вообщем менять права пользователй крайне не желательно, но есть группа пользователей без Роли Руководитель, вот им нельзя смотреть документ ДокументУП_ДокументДДС с видом операции ВыплатаСотрудникам
(1) Из опыта скажу, что лучше проверять не Роль а Профиль; Потому что Профиль легко можно настроить из программы (не нужен конфигуратор)
Пример из Документооборота:
Пример из Документооборота:
// Обработчик подписки ДокументооборотПраваДоступаПриЗаписиФайла
Процедура ДокументооборотПраваДоступаПриЗаписиФайла(Источник, Отказ) Экспорт
// Проверка права добавления
Если Не ПривилегированныйРежим() И Не РольДоступна("ПолныеПрава") Тогда
// В.Ч.
ЕстьРольДляДоступа = вчПрава.ЕстьПрофиль("Делопроизводители");
Если НЕ ЕстьРольДляДоступа Тогда
Если Источник.ДополнительныеСвойства.Свойство("ЭтоНовый")
И Источник.ДополнительныеСвойства.ЭтоНовый Тогда
Права = ПолучитьПраваПоОбъекту(Источник.Ссылка);
Если Не Права.Добавление Тогда
ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.
|Обратитесь к администратору.'");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
// Общие модули - вчПрава
&НаСервере
Функция ЕстьПрофиль(Знач НаименованиеПрофиляГруппДоступа=Неопределено, Пользователь=Неопределено, ПропуститьАдминистраторы=Ложь) Экспорт
// При вызове без параметров проверяет входит ли Пользователь в Группу "Администраторы" или "Делопроизводители"
Если Пользователь=Неопределено Тогда
Пользователь = Пользователи.ТекущийПользователь();
КонецЕсли;
// Если использование прав доступа включено, то выполняется получение прав доступа
УстановитьПривилегированныйРежим(Истина);
Если НЕ ПропуститьАдминистраторы Тогда
// Вначале проверим входит ли Пользователь в Группу "Администраторы" или "Делопроизводители"
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа,
| ГруппыДоступаПользователи.Пользователь,
| ГруппыДоступа.Профиль
| ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО ГруппыДоступаПользователи.Ссылка = ГруппыДоступа.Ссылка
| ГДЕ ГруппыДоступаПользователи.Ссылка в (&Администраторы)
| И ГруппыДоступаПользователи.Пользователь = &ТекущийПользователь";
Администраторы_ = Новый Массив;
Администраторы_.Добавить(ГруппаДоступа("Администраторы"));
Администраторы_.Добавить(ГруппаДоступа("Делопроизводители"));
Запрос.УстановитьПараметр("Администраторы",Администраторы_);
//Запрос.УстановитьПараметр("Администраторы", ГруппаДоступа("Делопроизводители") );
Запрос.УстановитьПараметр("ТекущийПользователь", Пользователь );
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество()<>0 Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если НаименованиеПрофиляГруппДоступа=Неопределено Тогда
Возврат Ложь;
КонецЕсли;
// Теперь получим всех пользователей Профиля;
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа,
| ГруппыДоступаПользователи.Пользователь,
| ГруппыДоступа.Профиль
| ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО ГруппыДоступаПользователи.Ссылка = ГруппыДоступа.Ссылка
| ГДЕ ГруппыДоступа.Профиль = &Профиль";
ПрофильГрупп = ПрофильГруппДоступа(НаименованиеПрофиляГруппДоступа);
Запрос.УстановитьПараметр("Профиль", ПрофильГрупп );
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ЕстьПрофильДляДоступа = Ложь;
Пока Выборка.Следующий() И НЕ ЕстьПрофильДляДоступа Цикл
Если ТипЗнч(Выборка.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда
Если Выборка.Пользователь = Пользователь Тогда
ЕстьПрофильДляДоступа = Истина;
Прервать;
КонецЕсли;
ИначеЕсли ТипЗнч(Выборка.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
Для Каждого СтрокаСостав из Выборка.Пользователь.Состав Цикл
Если СтрокаСостав.Пользователь = Пользователь Тогда
ЕстьПрофильДляДоступа = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ЕстьПрофильДляДоступа;
КонецФункции
&НаСервере
Функция ПрофильГруппДоступа(Наименование)
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ПрофилиГруппДоступа.Ссылка КАК Профиль
| ИЗ
| Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа
| ГДЕ (ПрофилиГруппДоступа.Наименование = &Наименование)";
Запрос.УстановитьПараметр("Наименование", Наименование );
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.Профиль;
КонецФункции
&НаСервере
Функция ГруппаДоступа(Наименование)
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ГруппыДоступа.Ссылка КАК ГруппаДоступа
| ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
| ГДЕ (ГруппыДоступа.Наименование = &Наименование)";
Запрос.УстановитьПараметр("Наименование", Наименование );
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.ГруппаДоступа;
КонецФункции
Показать
Всем "рядовым" сотрудникам выдается роль с доступом на документ, где в RLS прописано условие на вид операции.
А в роли "Руководитель" доступ на документ без ограничений. И все. Ничего программировать не надо.
И отчеты, получающие список документов, тоже будут автоматически фильтровать данные (только нужно добавлять ключевое слово РАЗРЕШЕННЫЕ к ВЫБРАТЬ, а то будет падать по нехватке прав доступа).
А в роли "Руководитель" доступ на документ без ограничений. И все. Ничего программировать не надо.
И отчеты, получающие список документов, тоже будут автоматически фильтровать данные (только нужно добавлять ключевое слово РАЗРЕШЕННЫЕ к ВЫБРАТЬ, а то будет падать по нехватке прав доступа).
Но в вашей текущей ситуации это слабо поможет, насколько я понимаю. Это идеальный вариант, если делать с нуля или типовая ее уже использует (я про подсистему "Управление доступом").
Я вот в самописке внедрил (только со своими шаблонами RLS, а не стандартными) и теперь горя не знаю. Красота нечеловеческая.
Я вот в самописке внедрил (только со своими шаблонами RLS, а не стандартными) и теперь горя не знаю. Красота нечеловеческая.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот