Вопрос

Сложный фильтр в клиентской схеме

Добрый день коллеги

 

Проблема такая не могу настроить фильтр в клиентской схеме так что бы выобрка действующих контактов была по Региону пользователя который открыл раздел.

 

К примеру если сотрудник зашёл в раздел контакты и сотрудник из региона "New York", то у него в раздел подтянуться только контакты у которых в поле Регион проставлен "New York"

 

Вот пример кода, нужна помощь с фильтром "RegionFilter"

filterGroup.add("ClientTypeFilter", this.Terrasoft.createColumnFilterWithParameter(
                        this.Terrasoft.ComparisonType.EQUAL, "ClientType", "15796DCC-EC99-4D1D-A270-37EC8CB26A07"));
                    filterGroup.add("RegionFilter", this.Terrasoft.createColumnFilterWithParameter(
                        this.Terrasoft.ComparisonType.EQUAL, "[Contact:Region]",
                        Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value));

Нравится

13 комментариев
Лучший ответ
esq.filters.add("RegionFilter", this.Terrasoft.createColumnFilterWithParameter(
       this.Terrasoft.ComparisonType.EQUAL, "Region.[Contact:Region].Id",
        Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value));

 

esq.filters.add("RegionFilter", this.Terrasoft.createColumnFilterWithParameter(
       this.Terrasoft.ComparisonType.EQUAL, "Region.[Contact:Region].Id",
        Terrasoft.core.enums.SysValue.CURRENT_USER_CONTACT.value));

 

Вообще, правильнее такое делать путём настройки прав по организационным ролям. Создать БП на создании контакта или изменении его региона и выдавать права на чтение нужной роли. Ну и для объекта настроить права на новые записи только тем, кому нужно видеть из всех регионов.

 

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

Зверев Александр, тут доработок было много до нас пока не будем рисковать. Но согласен, в идеале будет корректнее делать так

Зверев Александр,

 Тогда будет проблема связанная со спецификой актуализации доступов по группам, если нажать "Актуализировать" то все права доступа перетрутся на стандартные, удаляя то что изменит Ваш процесс.

Вроде бы у записей о правах есть несколько видов и затираются только те, которые генерировались прошлый раз автоматически. Те, у которых стоит ручное происхождение, не трогаются.

Нет, затираются все, к сожалению. По данному вопросу уже был разговор с Террасофт

Да, действительно, Александр, Вы недавно писали.

 

Уточнил у разработчиков ядра по результатам, проблема не подтвердилась, актуализация не затирает права, а вставляет новые, не трогая те, которые раздавались вручную либо через БП. Там дело немного в другом, то, что в системе все ещё есть запрещающие права, и при актуализации могут раздаваться разрешающие, и в итоге получается 2 противоречащих права. С этим вопросом пока не разбирались.

 

То есть, если не используете запрещающие права, должно работать корректно.

Зверев Александр,

постараюсь найти ответ поддержки где указывали что права при актуализации затирают права созданные процессом

Зверев Александр,

Добрый день, Александр!

В рамках данного обращения будет рассмотрен вопрос по тех.реализации доступов ролей

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

По сути актуализация прав удаляет и заново добавляет права доступа согласно настроек. 

Однако, бизнес процессом изменяются только права доступа по записям. 
Вы можете учесть этот момент в вашем кейсе. 

Права но операциям и на колонки, бизнес процессом не изменяются, на текущий момент. 

На текущий момент права доступа хранятся в таких таблицах:
Доступ по операциям
SysEntitySchemaOperationRight

Доступ по записям
Настройки прав хранятся в таблице: SysEntitySchemaRecordDefRight
Права хранятся в таблице: Sys[Объект]Right
Происхождение прав хранится в таблице: SysEntitySchemaRecRightSource

Доступ по колонкам
Настройки прав хранятся в таблице: SysEntitySchemaColumnRight
Уровень прав хранится в таблице: SysEntitySchemaColRightLevel

Я создам задачу на отдел разработки, по описанному кейсу для рассмотрения её решения в будущих версиях приложения.

Зверев Александр,

как видно из ответа "Вы верно заметили, что при актуализации прав доступа все изменения прав бизнес процессом затираются." все же затираются

Уточнял, нет, не подтвердилось.

 Актуализация не трогает права которые розданы БП либо вручную. Все что она делает, удаляет права которые выданы дефолтной раздачей (права выданые вручную или БП отсекаются по источнику) и раздает по новым настройкам дефолтных прав.

Зверев Александр,

"

Все что она делает, удаляет права которые выданы дефолтной раздачей (права выданые вручную или БП отсекаются по источнику) 

" - можно подробнее, так как не совсем понял Вас?

У записи в таблице прав есть справочное поле SourceId, оно ссылается на справочник SysEntitySchemaRecRightSource со значениями: Owner, Author, Manual, Default.

 

Возможно, ранее в БП раздали не с тем значением, вот их и удалило заодно.

Показать все комментарии