|
У пользователя недостаточно прав | ☑ | ||
---|---|---|---|---|
0
TSRh
05.12.19
✎
12:28
|
Здравствуйте всем!
ЗУП 3.1 8.3.13.1690 Профиль пользователя - "Кадровик" Роль "Добавление изменение штатного расписания" - вкл RLS вкл Ограничение по Подразделениям - вкл, нужное указано В ТЖ событий QERR нет Внимание, вопрос: {Справочник.ШтатноеРасписание.Форма.ФормаЭлемента.Форма(3497)}: Ошибка при вызове метода контекста (Записать) ИначеЕсли Записать(ПараметрыЗаписи) И ДополнительныеПараметры.ЗакрытьПослеЗаписи Тогда по причине: У пользователя недостаточно прав на исполнение операции над базой данных. Буду очень благодарен за наводку, где и как же увидеть то самое место? |
|||
1
ДенисЧ
05.12.19
✎
12:33
|
В журнале регистрации обычно такое видно
|
|||
2
catena
05.12.19
✎
12:33
|
В ЖР возможно написано каких прав и на какой объект не хватает.
|
|||
3
TSRh
05.12.19
✎
12:35
|
Ну если я до ТЖ докатился, но очевидно в ЖР ничего внятного, кроме того же самого, нет )
|
|||
4
TSRh
05.12.19
✎
12:37
|
Забыл добавить:
В расширениях ничего про Справочник.ШтатноеРасписание нету |
|||
5
catena
05.12.19
✎
12:37
|
(3)А в ЖР включена регистрация всех событий?
|
|||
6
ДенисЧ
05.12.19
✎
12:38
|
(3) ТЖ и ограничения прав мало связаны...
|
|||
7
TSRh
05.12.19
✎
12:40
|
(5) пардон за дремучесть, а как это проверить ?
|
|||
8
ДенисЧ
05.12.19
✎
12:41
|
(7) В конфигураторе Администрирование - настройка журнала регистрации
|
|||
9
TSRh
05.12.19
✎
12:41
|
(6)
https://its.1c.ru/db/v8313doc#bookmark:adm:TI000000396 ● QERR ‑ события, связанные с обнаружением ошибок компиляции запроса или ограничения на уровне записей и полей базы данных. |
|||
10
TSRh
05.12.19
✎
12:43
|
(8) спасибо, совсем забыл про этот пункт. успел даже обработку найти, которая программно настраивает
да, регистрация всех событий включена |
|||
11
TSRh
05.12.19
✎
12:44
|
(10) Событие то в ЖР есть, куда ж без него
только толку Справочник.ШтатноеРасписание Действие: Добавление Доступ: Отказ в доступе |
|||
12
Kigo_Kigo
05.12.19
✎
12:46
|
Удачи в отлове этой ошибки,
"У пользователя недостаточно прав на исполнение операции над базой данных." я так ее и не отловил,Во всех ТЖ,ЖР и так далее пусто,все события вкл, если отловишь и решишь, как с ней бороться -отпишись |
|||
13
catena
05.12.19
✎
12:47
|
(11)Ну вот, осталось проверить роли пользователя на предмет Добавления в данный справочник.
|
|||
14
ДенисЧ
05.12.19
✎
12:50
|
(11) "Справочник.ШтатноеРасписание
Действие: Добавление Доступ: Отказ в доступе" Ты не русский? ))Не понимаешь, что тут написано? |
|||
15
piter3
05.12.19
✎
12:50
|
(12) В чем подвох?
|
|||
16
Kigo_Kigo
05.12.19
✎
12:57
|
(15) не нашел, пока отказался от РЛС, весь прикол в том что, работало и тут раз - нате, распишитесь
Не могу отловить "у пользователя недостаточно прав на исполнение операции над базой данны" |
|||
17
Kigo_Kigo
05.12.19
✎
12:58
|
(11) а, ну тут то есть над чем подумать, мне такого благо не снизошло
|
|||
18
TSRh
05.12.19
✎
13:02
|
(13) см (0)
(14) вы не русский, см (0) (12) ок |
|||
19
Putrina
05.12.19
✎
13:09
|
подвох есть!
|
|||
20
catena
05.12.19
✎
13:11
|
(18)И что? Вытаскиваем шаблон РЛС и смотрим.
|
|||
21
ДенисЧ
05.12.19
✎
13:11
|
(18) Ты добавил роль. А есть ли в этой роли право на изменение справочника? Это проверил? А РЛС проверил?
|
|||
22
TSRh
05.12.19
✎
13:19
|
(20) (21) с этого места можно поподробнее, пжл
в шаблоне: Прочие поля #Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда #ДляОбъекта("") #Иначе #ПоЗначениямРасширенный( "Справочник.ШтатноеРасписание","Добавление","", "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодчиненностьПодразделенийОрганизаций КАК Т2 ПО Т2.Подразделение = Т.Подразделение", "", "ПодразделенияОрганизаций","Т2.ВышестоящееПодразделение","И", "Организации","Т.Владелец","", "","","","","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) #КонецЕсли и как эту байду проверить ?? |
|||
23
TSRh
05.12.19
✎
13:20
|
(22) На регистр право "Чтение" у роли стоит
|
|||
24
pechkin
05.12.19
✎
13:21
|
переходи на ОграничениеДоступаНаУровнеЗаписейУниверсально
|
|||
25
catena
05.12.19
✎
13:22
|
(22)Там есть закладка с шаблонами, в них запросы.
|
|||
26
TSRh
05.12.19
✎
13:28
|
(25) Ну я оттуда его и взял
|
|||
27
catena
05.12.19
✎
13:29
|
(26)не правда
|
|||
28
catena
05.12.19
✎
13:30
|
(26)Ты взял с закладки "Права". ПоЗначениямРасширенный - это шаблон, он на другой закладке.
|
|||
29
drcrasher
05.12.19
✎
13:31
|
(0) запустить конфигуратор под проблемным юзером, выставить остановку по ошибке, запустить отладку,..., профит
|
|||
30
TSRh
05.12.19
✎
13:48
|
||||
31
TSRh
05.12.19
✎
13:48
|
(29) это фиаско
|
|||
32
catena
05.12.19
✎
13:51
|
https://i111.fastpic.ru/big/2019/1205/36/_2f41fab4572708c939cf5f68b3bf8f36.png
ПоЗначениямРасширенный - Оно прям посередине картинки |
|||
33
catena
05.12.19
✎
13:52
|
Только роль открой нужную, а не по всем шаблонам
|
|||
34
TSRh
05.12.19
✎
13:56
|
(33) Меня сейчас вырвет прямо на монитор
// ПоЗначениямРасширенный(Таблица, -, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). // № параметра: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,...,3+n*3,4+n*3,5+n*3. // Читается так: "ограничение доступа по значениям расширенный". // Параметры: // Таблица - Имя текущей таблицы, например "Документ.ПоступлениеТоваровИУслуг". // Модификатор - изменяет шаблон. // 1-й модификатор - строка "НеОграничиватьДоступКГруппам" указывает // безусловно выбирать группы иерархического справочника. // Других модификаторов в этой версии шаблона не предусмотрено. // ПрисоединяемыеТаблицы - текст присоедиения дополнительных таблиц на языке запросов, например, // "ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.ОплатаПоставщикам КАК Т1 // ПО Т.Ссылка = Т1.Ссылка". // Присоединение позволяет указать поля таблицы ОплатаПоставщикам, как поля основной таблицы // для проверки их значений, как значений основной таблицы. // Следует помнить, что при размножении строк в результате соединения, достаточно чтобы // всего одна строка прошла условия проверки, т.е. результаты проверки строк объединяются по "ИЛИ". // О - Начальные скобки "(". // В(n) - Вид доступа - имя вида доступа, например, "Организации". Для полей составного типа, с целью повышения // производительности, лучше указать несколько имен, например, "Организации,ГруппыФизическихЛиц", // чем использовать несколько блоков параметров, с одним и тем же именем поля. // Специальные виды доступа "Условие", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения", // "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору" можно использовать только отдельно. // Когда В(n) = "Условие" (или ""), тогда П(n) содержит строку условия на языке запросов, например // "Т.Автор = &АвторизованныйПользователь", // "ТИПЗНАЧЕНИЯ(Т.Владелец) = ТИП(Справочник.Организации)", где Т - псевдоним текущей таблицы. // Когда В(n) = "ПравоЧтения" Или "ПравоИзменения", // выполняется проверка наличия права на таблицу значения Т.П(n). // Когда В(n) = "ПравоЧтенияПоИдентификатору" или "ПравоИзмененияПоИдентификатору", // выполняется проверка наличия права на таблицу по идентификатору в значении Т.П(n). // П(n) - Поле проверяемого значения с псевдонимом, например "Т.Организация", // кроме случая В(n) = "Условие" (или ""). // О(n) - Логические операции "И", "ИЛИ" в сочетании с скобками "(", ")". // Примечение: максимальное количество одновременно проверяемых значений полей можно увеличить, изменив шаблон, но // необходимо будет указывать все параметры шаблона, т.е. указывать пустые строки, когда количество полей меньше максимального. // Шаблон имеет структуру: // <Общая часть условий> <Условие по группе параметров 1> И/ИЛИ <Условие по группе параметров 2> И/ИЛИ ... <Условие по группе параметров(n)> // Пример: // ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "", "", // "", // "", // "Организации","Т.Организация","И(", // "Склады","Т.СкладОтправитель","ИЛИ", // "Склады","Т.СкладПолучатель",")", "","","", ...) #Если &ОграничениеДоступаНаУровнеЗаписейИспользуется = "" #Тогда // Информационная база заблокирована для обновления. ГДЕ ЛОЖЬ #ИначеЕсли Не СтрСодержит(&ВерсииШаблоновОграниченияДоступа, ",ПоЗначениямРасширенный17,") #Тогда Ошибка: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 17 шаблона ограничения доступа ПоЗначениямРасширенный. Объект: #ИмяТекущейТаблицы, Право: #ИмяТекущегоПраваДоступа. #Иначе // Проверка правильности параметра Право. #Если Не ("#Параметр(2)" = "Чтение" Или "#Параметр(2)" = "Добавление" Или "#Параметр(2)" = "Изменение" Или "#Параметр(2)" = "Удаление" Или "#Параметр(2)" = "") Или #ИмяТекущегоПраваДоступа <> "Чтение" И "#Параметр(2)" = "Чтение" Или #ИмяТекущегоПраваДоступа = "Чтение" И "#Параметр(2)" <> "Чтение" И "#Параметр(2)" <> "" #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеПраво: #Параметр(2) #КонецЕсли // Проверка правильности параметра ИмяТаблицы. #Если "#Параметр(1)" <> #ИмяТекущейТаблицы #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверноеИмяТекущейТаблицы: "#Параметр(1)" #КонецЕсли // Проверка правильности параметра Модификатор. #Если Не ("#Параметр(3)" = "НеОграничиватьДоступКГруппам" Или "#Параметр(3)" = "") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйМодификатор: #Параметр(3) #КонецЕсли // Общая проверка использования ограничений доступа на уровне записей и // проверка использования хотя бы одного ограничения из указанных видов доступа. #Если Не ( Истина И ("#Параметр(6)" = "" И "#Параметр(7)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(6),")) И ("#Параметр(9)" = "" И "#Параметр(10)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(9),")) И ("#Параметр(12)" = "" И "#Параметр(13)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(12),")) И ("#Параметр(15)" = "" И "#Параметр(16)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(15),")) И ("#Параметр(18)" = "" И "#Параметр(19)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(18),")) И ("#Параметр(21)" = "" И "#Параметр(22)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(21),")) И ("#Параметр(24)" = "" И "#Параметр(25)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(24),")) И ("#Параметр(27)" = "" И "#Параметр(28)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(27),")) И ("#Параметр(30)" = "" И "#Параметр(31)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(30),")) И ("#Параметр(33)" = "" И "#Параметр(34)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(33),")) И ("#Параметр(36)" = "" И "#Параметр(37)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(36),")) И ("#Параметр(39)" = "" И "#Параметр(40)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(39),")) И ("#Параметр(42)" = "" И "#Параметр(43)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(42),")) И ("#Параметр(45)" = "" И "#Параметр(46)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(45),")) И ("#Параметр(48)" = "" И "#Параметр(49)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(48),")) И ("#Параметр(51)" = "" И "#Параметр(52)" = "" Или Не &ОграничениеДоступаНаУровнеЗаписейИспользуется И Не СтрСодержит(",Объект, ,ПравоЧтения,ПравоИзменения,ПравоЧтенияПоИдентификатору,ПравоИзмененияПоИдентификатору,", ",#Параметр(51),")) ) #Тогда Т ИЗ Т // Т - псевдоним текущей таблицы (выбран коротким, чтобы сократить количество символов в тексте параметра-условия на языке запросов). // Присоединяемые таблицы к проверяемой строке текущей таблицы "Т". #Параметр(4) ГДЕ ИСТИНА В ( // Проверка права пользователя на текущую таблицу в целом. // Права на таблицы формируются по составу ролей профиля группы доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ #Если СтрСодержит(&ТаблицыРасширенийСОграничениемДоступа, "|#Параметр(1);") #Тогда Справочник.ИдентификаторыОбъектовРасширений КАК СвойстваТекущейТаблицы #Иначе Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа ПО СвойстваТекущейТаблицы.ПолноеИмя = "#Параметр(1)" И ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа ГДЕ ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка #Если #ИмяТекущегоПраваДоступа = "Изменение" #Тогда И ТаблицыГруппДоступа.Изменение #ИначеЕсли #ИмяТекущегоПраваДоступа = "Добавление" #Тогда И ТаблицыГруппДоступа.Добавление #КонецЕсли ) И ГруппыДоступа.Ссылка В ( ВЫБРАТЬ ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа ИЗ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь ) ГДЕ // Безусловная выборка групп в иерархическом объекте метаданных (если нужно). #Если "#Параметр(3)" = "НеОграничиватьДоступКГруппам" #Тогда Т.ЭтоГруппа ИЛИ #КонецЕсли ( // Поиск значений заданных полей в разрешенных значениях групп доступа (пользователей). #Параметр(5) // [([(][(]...] 0-n открывающихся скобок. //// Проверка значения поля группы параметров 1. #Если &ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(6)" = "Условие" Или "#Параметр(6)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(7) ) #ИначеЕсли "#Параметр(6)" = "ПравоЧтения" Или "#Параметр(6)" = "ПравоИзменения" #Тогда #Параметр(7) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(7)) #Если Не "#Параметр(6)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(6)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(7) #Если Не "#Параметр(6)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(6)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(7) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(6),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(6)", ",") #Тогда НеверныйВидДоступа: "#Параметр(6)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(6)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(6),") #Тогда ( ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(6),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(6),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(7) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(6),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(7) #ИначеЕсли "#Параметр(7)" = "Т.Ссылка" И "#Параметр(6)" <> "Пользователи" И "#Параметр(6)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(6)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(6)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(6),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(7) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(7) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(7)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ЕСТЬNULL(#Параметр(7), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(8) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 2. #Если "#Параметр(9)" = "" И "#Параметр(10)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(9)" = "Условие" Или "#Параметр(9)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(10) ) #ИначеЕсли "#Параметр(9)" = "ПравоЧтения" Или "#Параметр(9)" = "ПравоИзменения" #Тогда #Параметр(10) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(10)) #Если Не "#Параметр(9)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(9)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(10) #Если Не "#Параметр(9)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(9)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньРазрешенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) И НЕ ЛОЖЬ В // Проверка, что пользователю или какой-нибудь группе пользователя право запрещено. ( ВЫБРАТЬ ПЕРВЫЕ 1 ЛОЖЬ ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(10) И НастройкиПрав.Объект = НаследованиеНастроек.Родитель #Если #ИмяТекущегоПраваДоступа = "Чтение" #Тогда И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияЧтения #Иначе #Если СтрСодержит(&ТаблицыСОтдельнымиНастройкамиПрав, "|#Параметр(1);") #Тогда И НастройкиПрав.Таблица = СвойстваТекущейТаблицы.Ссылка #Иначе И НастройкиПрав.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) #КонецЕсли И НаследованиеНастроек.УровеньИспользования < НастройкиПрав.УровеньЗапрещенияИзменения #КонецЕсли ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей ПО СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь И СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь ) ) #ИначеЕсли Не СтрСодержит(&ВсеВидыДоступаКромеСпециальных, ",#Параметр(9),") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. #Если СтрСодержит("#Параметр(9)", ",") #Тогда НеверныйВидДоступа: "#Параметр(9)" - "Список имен видов доступа не найден" #Иначе НеверныйВидДоступа: "#Параметр(9)" - "Имя вида доступа не найдено" #КонецЕсли #ИначеЕсли &ВидыДоступаСОтключеннымИспользованием <> "Все" И Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",#Параметр(9),") #Тогда ( ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО И #Если (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",Пользователи,") И СтрСодержит(",#Параметр(9),", ",Пользователи,")) Или (Не СтрСодержит(&ВидыДоступаСОтключеннымИспользованием, ",ВнешниеПользователи,") И СтрСодержит(",#Параметр(9),", ",ВнешниеПользователи,")) #Тогда НЕ ( НЕ ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа ГДЕ ГруппыЗначенийДоступа.ЗначениеДоступа = #Параметр(10) И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = &АвторизованныйПользователь ) И НЕ #Иначе ( #КонецЕсли ВЫБОР КОГДА ИСТИНА В ( #Если СтрСодержит(&ВидыДоступаБезГруппДляЗначенияДоступа, ",#Параметр(9),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = #Параметр(10) #ИначеЕсли "#Параметр(10)" = "Т.Ссылка" И "#Параметр(9)" <> "Пользователи" И "#Параметр(9)" <> "ВнешниеПользователи" #Тогда #Если СтрСодержит("#Параметр(9)", ",") #Тогда // Когда параметр задан неверно, вставляется строка, чтобы вызвать ошибку сборки ограничения доступа. НеверныйВидДоступа: "#Параметр(9)" - "При проверке таблицы значения доступа можно указывать только один вид доступа" #ИначеЕсли СтрСодержит(&ВидыДоступаСОднойГруппойДляЗначенияДоступа, ",#Параметр(9),") #Тогда ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ГДЕ Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = Т.ГруппаДоступа #Иначе // Значения доступа, для которых можно указать несколько групп значений доступа. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ #Параметр(1).ГруппыДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаДоступа И ГруппыЗначений.Ссылка = #Параметр(10) #КонецЕсли #Иначе ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступа КАК Значения ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений ПО Значения.ГруппаДоступа = ГруппыДоступа.Ссылка И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа И ГруппыЗначений.ЗначениеДоступа = #Параметр(10) #КонецЕсли ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ = ВЫБОР КОГДА ИСТИНА В ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию ГДЕ ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(#Параметр(10)) И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ ) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ) ) #Иначе ЕСТЬNULL(#Параметр(10), НЕОПРЕДЕЛЕНО) <> НЕОПРЕДЕЛЕНО #КонецЕсли #Параметр(11) // [)[)][)]...] [ИЛИ|И] [([(][(]...] оператор И/ИЛИ с/без скобок. //// Проверка значения поля группы параметров 3. #Если "#Параметр(12)" = "" И "#Параметр(13)" = "" #Тогда // Группа параметров не используется. #ИначеЕсли &ОграничениеДоступаНаУровнеЗаписейИспользуется И ("#Параметр(12)" = "Условие" Или "#Параметр(12)" = "") #Тогда // Когда имя вида доступа "Условие" (или ""), тогда вместо имени поля задано условие. ( #Параметр(13) ) #ИначеЕсли "#Параметр(12)" = "ПравоЧтения" Или "#Параметр(12)" = "ПравоИзменения" #Тогда #Параметр(13) <> НЕОПРЕДЕЛЕНО И ИСТИНА В ( // Проверка права пользователя на таблицу Значения, установленного в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТИПЗНАЧЕНИЯ(ТаблицыГруппДоступаПроверкаПрава.ТипТаблицы) = ТИПЗНАЧЕНИЯ(#Параметр(13)) #Если Не "#Параметр(12)" = "ПравоЧтения" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" Или "#Параметр(12)" = "ПравоИзмененияПоИдентификатору" #Тогда ИСТИНА В ( // Проверка права пользователя на таблицу, идентификатор которой указан в Значении, установленном в поле. ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступаПроверкаПрава ГДЕ ТаблицыГруппДоступаПроверкаПрава.ГруппаДоступа = ГруппыДоступа.Ссылка И ТаблицыГруппДоступаПроверкаПрава.Таблица = #Параметр(13) #Если Не "#Параметр(12)" = "ПравоЧтенияПоИдентификатору" #Тогда И ТаблицыГруппДоступаПроверкаПрава.Изменение #КонецЕсли ) #ИначеЕсли Не &ОграничениеДоступаНаУровнеЗаписейИспользуется #Тогда ИСТИНА // Группа параметров отключена. #ИначеЕсли "#Параметр(12)" = "НастройкиПрав" #Тогда ( ИСТИНА В // Проверка, что пользователю или какой-нибудь группе пользователя право разрешено ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ РегистрСведений.НастройкиПравОбъектов КАК НастройкиПрав ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаследованиеНастроекПравОбъектов КАК НаследованиеНастроек ПО НаследованиеНастроек.Объект = #Параметр(13) И НастройкиПрав.Объ |
|||
35
TSRh
05.12.19
✎
13:57
|
(33) (34) как ЭТО можно отладить, добрый человек ?? )
|
|||
36
singlych
05.12.19
✎
14:37
|
Ну как-как, смотришь значения параметров сеанса, подставляешь параметры из ограничения, раскрываешь Если, и вперед, в консоль...
|
|||
37
singlych
05.12.19
✎
14:38
|
Потом выясняется какая-нибудь очевидная фигня, что юзеру тупо недоступно какое-нибудь подразделение или че-то типа того.
|
|||
38
TSRh
05.12.19
✎
17:04
|
(37) подразделения проверил
где-то в другом месте затык, третий день уже бьюсь... |
|||
39
TSRh
05.12.19
✎
17:16
|
ещё смущает, что в ТЖ нет записей QERR, значит RLS по идее не причём
|
|||
40
TSRh
05.12.19
✎
17:56
|
Фигня выяснилась. Но как она работает я так и не понял (
|
|||
41
singlych
06.12.19
✎
17:38
|
(40) а че было-то?
|
|||
42
TSRh
12.12.19
✎
12:45
|
(41) В профиле доступа не было "Добавить изменить штатное расписание", хотя в роли было. Не пойму, как профиль применяется. Видимо при запуске меняет роли ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |