Создал пользователя, создал роль к нему в конфигурации, проставил необходимые RLS права и уже 2 недели бьюсь с ошибкой при добавлении контактного лица, в журнале пишет ошибка регистр сведений. Ключидоступакобьектам, а при добавлении в режиме предприятия пишет, что на фото. Обновление служебных метаданных не помогает. Может кто сталкивался с такой ошибкой??
(1) Забил на такое, добавил Пользователя и дал ему доступ делать с ним, что хошь :)
РЛС оно интересно, если 300 человек заносит информацию в одну и туже карточку.
А когда это делает ОДИН человек, то накой РЛС там? :)
И вообще, добавление ролей через конфигуратор ("создал роль к нему в конфигурации") - прошлый век для современных УФ-конфигураций на БСП. Назначение ролей должно выполняться через режим Предприятия, через профили доступа и группы доступа.
(4) а интересно, как ты RLS будешь прописывать для каждой роли, если они пересекаются?? Если в одной роли все разрешено, а в другой ты запрет поставил, через RLS, то он не сработает.
(11) скриншоты приложил, если поможешь буду признателен.
А обновление метаданных делал обработкой с командой:
&НаСервере
Процедура ОбновитьНоваяНаСервере()
Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Истина, ЛОЖЬ,Ложь);
КонецПроцедуры
1) на моем снимке экрана обработка ИнструментыРазработчикаОбновлениеВспомогательныхДанных - ищи в папке tmplts в подпапке БСП. Т.е. надо развернуть дистрибутив БСП.
2) на твоем снимке экрана есть точное место ошибки: УправлениеДоступомСлужебный строка 7925
// Для процедур ПроверитьДоступКОбъекту, ПроверитьДоступКНаборуЗаписей.
Процедура СообщитьОбОшибкеДоступа(Данные, ПередЗаписью, ПравоЧтения, ПравоИзменения, ЭтоНовый)
Если ПередЗаписью Тогда
Если ПравоЧтения Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для изменения существующей версии:
|%1'"), ПредставлениеДанных(Данные));
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для чтения существующей версии:
|%1'"), ПредставлениеДанных(Данные));
КонецЕсли;
Иначе
Если ПравоЧтения И ПравоИзменения Тогда
Если ЭтоНовый Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для записи новой версии (нет права добавления):
|%1'"), ПредставлениеДанных(Данные));
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для записи новой версии (нет права добавления для сделанных изменений):
|%1'"), ПредставлениеДанных(Данные));
КонецЕсли;
ИначеЕсли ПравоЧтения Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для записи новой версии (ее невозможно будет изменить):
|%1'"), ПредставлениеДанных(Данные));
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для записи новой версии (ее невозможно будет прочитать):
|%1.'"), ПредставлениеДанных(Данные));
КонецЕсли;
КонецЕсли;
ВызватьИсключение ТекстОшибки;
КонецПроцедуры
Показать
Итак, суть ошибки в том, что нет прав изменения после записи такого контрагента.
- либо проблема в отсутствии обновления регистров и прочих данных, которые указаны на моем снимке экрана. Другой способ обновления - запустить базу с ключом ЗапуститьОбновлениеИнформационнойБазы (https://its.1c.ru/db/bsp22doc#content:234:1:issogl2_создание_профильных_ролей)
-либо в тесте RLS для права "изменения" (его нет в снимках экрана)
3) текст условия RLS явно нетиповой
- привязываться к названию группы контрагентов - плохо. Стоит кому-то переименовать группу и RLS сломается.Лучше сделать группу предопределенной.
- текст запроса неоднозначный. В смысле и сама основная таблица (которая проверяется) называется "контрагенты" и во вложенных подзапросах тот же синоним "контрагенты". Лучше во вложенных задать иной синоним.
Я находил где эта ошибка и обработку эту находил и запускал базу с ключем тоже, RLS надо под типовые переписать? Мне к перевозчикам начальник сказал прикрепиться, я предупредил, что при изменении вообще не сможет доступ иметь.. Во вложенной таблице сделаю другой синоним это не проблема, но я думаю это проблему не решит.
Добавил стандартные роли в группе доступа по изменению контрагентов + их изменил (снял галочки для изменения контрагентов в ролях, чтоб RLS в добавленной роли корректно работала и не пересекались со стандартной) все заработало, но это не выход. Я так понял, что ключи доступа к объектам привязаны к пользователю к регистре и если ключ есть то он записывает в базу, если ключа нет, то нет, мне нужно обновить эти ключи для новых ролей, но я так и не понял как это сделать! В приложенном скрине это твоя собственная обработка, в стандартных найти не могу.
(15) ты не указал что именно указано в RLS роли "Логист" на изменение.
RLS надо под типовые переписать?
Я просто предполагаю, что раз уж проверка срабатывает из кода БСП (библиотеки стандартных подсистем), то возможно в типовых шаблона RLS этот контроль как-то учтен.
Про обработку: это типовая, из конфигурации БСП. https://dropmefiles.com/OG5H3 (начни с самого нового файла, новой версии обработки)
Я так понял, что ключи доступа к объектам привязаны к пользователю к регистре и если ключ есть то он записывает в базу, если ключа нет, то нет, мне нужно обновить эти ключи для новых ролей, но я так и не понял как это сделать!
Не уверен, что дело обстоит именно так как ты пишешь. Но единственный способ оновить служебные регистры со 100% вероятностью - запуск приложенной обработки со всеми флагами.