Имя: Пароль:
1C
 
RLS. Производительный режим. ЧтениеОбъектаРазрешено
0 Wefast
 
20.03.25
09:31
Есть общий реквизит Регион который будет добавлен в справочник Сотрудники и всякие документы

Этот регион будет добавлен как одно из возможных ограничений доступа

Хочу в модуле менеджера документа Прием на работу написать так:

РазрешитьЧтениеИзменение
ГДЕ
	ЗначениеРазрешено(Организация)
	И ЗначениеРазрешено(ФизическоеЛицо)
	И ЗначениеРазрешено(Регион, ПустаяСсылка КАК Истина)
И ЧтениеОбъектаРазрешено(Сотрудник)


Использую обработку Управление доступом для проверки
При расчете того, что нужно написать в ограничение роли
появилось сообщение

"Оптимизация не используется, так как ключи доступа объекта используются другим объектом, либо отключена разработчиком, либо в ограничении есть условия кроме проверки прав объекта, которые остаются после упрощения ( с учетом неиспользуемых видов доступа).
Для работы ограничения записываются свои ключи доступа, зависимые от ключей доступа владельца, что увеличивает время обновления.
Иногда при разработке требуется учесть, что прав на зависимые ключи доступа рассчитываются с небольшим отставанием от расчета прав на ведущие ключи доступа"

Вот я не понимаю, что все это значит. Какие подводные при использование доп условия. Что за оптимизация такая и вот это все.

А в предложенная строка которую нужно поместить в ограничение роли сменилось с
#ДляОбъекта("")
на
#ДляОбъекта("Сотрудник")

Не пойму тогда как шаблон отработает.
Разве в модуле менеджера все те поля которые используюся не берутся от параметра переданного в ограничение роли?
Т.е. когда #ДляОбъекта(""), по факту передается Ссылка.
И в модуле менеджера Ограничение типа ЗначениеРазрешено(ФизическоеЛицо) как раз берет это физ лицо как Ссылка.ФизическоеЛицо.

А как он будет тогда работать когда я укажу #ДляОбъекта("Сотрудник")
1 Ненавижу 1С
 
гуру
20.03.25
09:53
Как минимум надо расширить определяемые типы
ЗначениеДоступа
ЗначениеДоступаОбъект
2 Wefast
 
20.03.25
10:22
(1) это понятно. Ограничение по Региону уже работает.

Проблема возникла в том, что нужно части сотрудникам присвоить регион и скрыть по ним все данные.
При этом проставить регион в старых документах нельзя.

И получилось так, что в старом документе вместо сотрудника "Объект не найден", но документ и суммы доступны.
А в случае документов "списком", в поле "Сотрудники" текстовое представление. И в теории пользовать может понять что за сотрудник скрывается за "Объект не найден".

Поэтому появилась идея добавить везеде проверку На ЧтениеОбъектаРазрешено(Сотрудник)

Мало того, что теперь все ограничения где было ДляОбъекта("") придется поменять на ДляОбъекта("Сотрудник"), так хотелось бы понять, есть ли ньюансы подобного решения с точки зрения производительности или скорости обновления ключей. Или еще что то работать будет хуже чем без этого условия

А может надо написать

Ограничение.Текст =
	"ПрисоединитьДополнительныеТаблицы
	|ЭтотСписок КАК Т
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Т2
	|По Т.Сотрудник = Т2.Ссылка
	|;
	|РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Т.Организация)
	|	И ЗначениеРазрешено(Т.ФизическоеЛицо)
	|	И ЗначениеРазрешено(Т.Регион, ПустаяСсылка КАК Истина)
	|И ЧтениеОбъектаРазрешено(Т2.Ссылка)
	|";


Тогда предлагает в ограничение доступа написать:
#ДляОбъекта("Ссылка")

И тогда возможно не придется править типовые роли массово, т.к. я так понимаю
#ДляОбъекта("Ссылка") и #ДляОбъекта("") одно и тоже
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn