|
Как запустить функцию НайтиПомеченныеНаУдаление() от обычного пользователя? | ☑ | ||
---|---|---|---|---|
0
xintrea
10.12.12
✎
16:45
|
Здравствуйте!
Есть обычный пользователь, к некоторым подсистемам имеет доступ, к некоторым не имеет. Задача - дать возможность пользователю удалять объекты, помеченные на удаление, в пределах его прав. Если вызвать функцию НайтиПомеченныеНаУдаление(), то возникает ошибка: {ОбщийМодуль.ОсновнойМодуль.Модуль(874)}: Ошибка при вызове метода контекста (НайтиПомеченныеНаУдаление) Помеченные = НайтиПомеченныеНаУдаление(); по причине: У пользователя недостаточно прав на исполнение операции над базой данных. объект: 'Справочник.РазделыПроектовРазработкиДокументации'; право: 'Чтение' Таблица: 'Reference208', SDBL-команда: 'SELECT'. То есть, пользователь не имеет доступа к справочнику РазделыПроектовРазработкиДокументации (этот справочник принадлежит подсистеме, с которой данный пользователь работать не должен). Так настроены права, так нужно. Но это же не должно обозначать, что вообще нельзя выполнить поиск помеченных на удаление объектов, в пределах прав пользователя! Вопрос: как получить объекты, помеченные на удаление, и доступные для удаления пользователю? |
|||
1
ParinovS
10.12.12
✎
16:49
|
Я бы посоветовал обходить все метаданные через попытку.
|
|||
2
H A D G E H O G s
10.12.12
✎
16:52
|
СП украли?
УстановитьПривилегированныйРежим() |
|||
3
Heckfy
10.12.12
✎
16:55
|
(2) Не то. Ему не все помеченные надо, а только в рамках дозволенного пользователю.
|
|||
4
H A D G E H O G s
10.12.12
✎
16:58
|
(3) Ну потом пусть шерстит массив ссылок на право чтения.
|
|||
5
H A D G E H O G s
10.12.12
✎
17:01
|
Если rls на уровне метаданных - ПравоДоступа()
Если rls на уровне данных - в попытке: ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементМассива,"Ссылка"). Как то так наверное. |
|||
6
xintrea
10.12.12
✎
17:03
|
(1)
> Я бы посоветовал обходить все метаданные через попытку. Есть какой-нибудь пример кода? |
|||
7
xintrea
10.12.12
✎
17:03
|
(4) Откуда взять это массив ссылок? Можно пример кода?
|
|||
8
H A D G E H O G s
10.12.12
✎
17:08
|
МассивСсылок=НайтиПомеченныеНаУдаление();
|
|||
9
xintrea
11.12.12
✎
08:34
|
(8) Так в том-то и дело, что функция НайтиПомеченныеНаУдаление():
- отрабатывает нормально только в случае, если доступны ВСЕ объекты; - генерирует ошибку времени исполнения, которую я привел в топике, если нет прав хотя бы на один объект. Так что так просто получиить массив помеченных объектов нельзя. Вот я и спрашиваю, как можно обходным путём получить такой массив. |
|||
10
Heckfy
11.12.12
✎
09:46
|
(8) Не понимает он тебя. :(
(6) Вот пример кода обхода всех справочников с выводом количества записей: Для Каждого Спр Из Метаданные.Справочники Цикл Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | КОЛИЧЕСТВО(*) КАК Кол |ИЗ | Справочник."+Спр.Имя+" КАК Справочник" ; РезультатЗапроса=Запрос.Выполнить().Выбрать(); РезультатЗапроса.Следующий(); Сообщить(Спр.Имя+" "+РезультатЗапроса.Кол); КонецЦикла; |
|||
11
suvolod
12.12.12
✎
18:54
|
Перебери метаданные. Вот кусок типового кода, который позволяет строить реестр только по разрешенным документам:
код, который взял из типового отчета "Реестр документов" // Создает список значений, содержащий виды документов существующих в системе, Функция СоздатьСписокВидовДокументов() Перем СписокВидов; Перем Выбор; СписокВидов = Новый СписокЗначений; Для Каждого К Из Метаданные.Документы Цикл Если ПравоДоступа("Чтение", К) Тогда СписокВидов.Добавить(К.Имя, К.Синоним); КонецЕсли; КонецЦикла; Возврат СписокВидов; КонецФункции // СоздатьСписокВидовДокументов() |
|||
12
banco
12.12.12
✎
22:02
|
УстановитьПривилегированныйРежим() получить массив ссылок потом отключить привилегириванный режим и запросом разрешенные получить
|
|||
13
Aleksey
12.12.12
✎
22:11
|
Но ведь типовая как то получает же без плясок с бубном?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |