Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
В правах доступа для пользователя прописано
acc.PERIOD, acc.BRANCH и acc.CODE
В данных поля
dat.PERIOD, dat.SRC_BRANCH, dat.DEST_BRANCH, dat.SRC_CODE, dat.DEST_CODE
Как организовать SECTION APPLICATION доступ, чтобы был доступ ко всем записям
acc.PERIOD=dat.PERIOD and
(acc.BRANCH = dat.SRC_BRANCH or acc.BRANCH = dat.DEST_BRANCH)
and
(acc.CODE = dat.SRC_CODE or acc.CODE = DEST_CODE)
Склеил поля прав Подразделение&'$'& ТовГруппа и дважды пробежался по фактам сначала с одной стороны, потому с другой. Получил для каждого пользователя список фактических ключей Подразделение1&'$'& ТовГруппа1&'$'&Подразделение2&'$'& ТовГруппа2. Затем склейку заменил autohash256 и mapping, чтобы покороче ключ был.
Не очень понятно описано. Если вопрос ещё актуален, то напишите как-то иначе. Фишка таблицы, формируемой в секции доступа SECTION ACCESS в том, что поля должны называться (заголовки полей) в верхнем регистре. В секции приложения должно быть поле, которое будет загружено в секции доступа.
Тот есть, по этапам:
1. Формируем секцию доступа с полями USER, ACCESS и KEYFIELD. Поле KEYFIELD формируем из загружаемых данных.
2. Формируем массив данных в секции приложения, где так же будет поле KEYFIELD.
При проектировании можете в начале без секции доступа сформировать таблицу SectionAccess и убедиться через фильтрацию по ней, что данные фильтруются как задумано. Потом эту таблицу выносим в скрипте загрузки в Section Access и всё будет работать.
Попробую перефразировать
Есть в БД табличка с правами доступа
USER PERIOD BRANCH CODE
Иванов 2016.1 Подразделение3 ТовГруппа2
Петров 2016.1 Подразделение2 ТовГруппа1
Сидоров 2017.1 Подразделение3 ТовГруппа1
Есть таблица фактов
RMN PERIOD SRC_BRANCH SRC_CODE DEST_BRANCH DEST_CODE SUM
1 2016.1 Подразделение3 ТовГруппа2 Подразделение1 ТовГруппа3 100
2 2016.1 Подразделение2 ТовГруппа1 Подразделение3 ТовГруппа2 150
3 2016.1 Подразделение2 ТовГруппа2 Подразделение1 ТовГруппа3 50
4 2017.1 Подразделение1 ТовГруппа2 Подразделение2 ТовГруппа4 120
5 2017.1 Подразделение2 ТовГруппа1 Подразделение3 ТовГруппа2 110
6 2017.1 Подразделение2 ТовГруппа2 Подразделение3 ТовГруппа1 350
Соответственно на факты для пользователя должна наложиться маска прав
USER PERIOD BRANCH CODE
Иванов увидит строки 1, 2
Петров увидит строку 1
Сидоров увидит строку 6
Иван, привет.
Ты хочешь, чтобы у тебя пользователи получали доступ в зависимости от 2 полей.
Но section access, как я понимаю предоставляет доступ только по одному полю.
Если у тебя есть доступ к таблице фактов, и она у тебя загружается из sql-запроса, то я бы посоветовал воспользоваться оконными функциями, что позволит тебе для каждой комбинации Подразделение-ТовГруппа задать некое соответствие. Можно попробовать использовать rank() over (partition by Подразделение, ТовГруппа) as КодДоступа (или как-то так, надо смотреть что на выходе получится). И потом по этому полю уже выдавать доступы.
Склеил поля прав Подразделение&'$'& ТовГруппа и дважды пробежался по фактам сначала с одной стороны, потому с другой. Получил для каждого пользователя список фактических ключей Подразделение1&'$'& ТовГруппа1&'$'&Подразделение2&'$'& ТовГруппа2. Затем склейку заменил autohash256 и mapping, чтобы покороче ключ был.
Иван, если задача решена, пометь один из постов в топике как правильный.