Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Section Access - ограничение доступа к данным для разных групп пользователей

Всем привет! Бьюсь над задачей разграничения доступа к данным с помощью SectionAccess. Задача состоит в том, чтобы некоторые группы пользователей (продажи) видели только клиентов своего филиала (это понятно, как сделать), а остальные пользователи должны видеть все данные. Прописываю для сотрудников из продаж в скрипте в разделе SectionAccess:

select  UPPER(U.sAMAccountName) AS NTNAME ,

        U.filialName AS [Филиал Клиента]  from ....

В результате они видят данные, ассоциированные с клиентами своего филиала.

Вопрос в том, как сделать так, чтобы остальным пользователям (не продажам) было видно абсолютно все данные?

Для них никакого разграничения применяться не должно. Если я пишу для них в скрипте

SELECT  UPPER(U.sAMAccountName) AS NTNAME ,

        '*' AS [Филиал Клиента] from ...

то это отсеивает ту часть данных,у которых нет клиентов. Таким образом, пользователи   не увидят те данные, для которых нет записей в табличке с полем "Филиал Клиента". Как эту проблему решить? Надеюсь, понятно описала 😃

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

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

К сожалению качество данных как правило оставляет желать лучшего. Когда  на пример у клиента нет номера, ему дают какой-нибудь  dummy номер 99999, этот номер присоединяют dummy филиалу 999  и потом раздают на него права как обычно. Или что-то в этом роде. И всё работает.

А включать и выключать SectionAccess не получится. Нужно тогда делать две Application с SectionAccess и без.

Но я бы не стал так делать. Слишком много мороки их оба синхронизировать. Проще сделать так, чтобы всё работало в одном.

View solution in original post

13 Replies
NorkaOleg
Contributor II
Contributor II

Привет! Недавно сам решал примерную задачу. Необходимо было разграничить доступ к складу. В SECTION Access занес пользователей, в поле REDUCTION номера или ID склада к которому нужен доступ пользователю.

Далее в справочнике склада через SECTION Application, код справочника переименовал в поле REDUCTION, все работает. Попробуй сделать таким же способом. Тебе справочник филиалов нужно загружать через SECTION Application, переименовать поле [Филиал Клиента] в REDUCTION, а в SECTION Access в поле REDUCTION для каждого пользователя прописать свой филиал.

SECTION Access;

LOAD * Inline

[ ACCESS,NTNAME,REDUCTION

ADMIN,sidorov,*

USER,zaicev,2

USER,petrov,3

USER,ivanov,1

];

SECTION Application;

Справочник_склада:

LOAD

     ID_SKLAD,

     NAME_SKLAD,

     CODE_SKLAD as REDUCTION,

     CODE_SKLAD;

FROM ...

korsikov
Partner - Specialist III
Partner - Specialist III

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

Можно обойти данное ограничение таким образом Section Access "Star"

Not applicable
Author

В данный момент у меня "Филиал клиента" присутствует и в SECTION Access, и в SECTION Application.

Все написано точно так же, как  у тебя:

От того, что я переименую  "Филиал клиента" в Reduction, что-то изменится?

NorkaOleg
Contributor II
Contributor II

По идее должно работать.

SECTION Access должен быть таким:

SECTION Access;

LOAD * Inline

[ ACCESS,NTNAME,REDUCTION

ADMIN,sidorov,*

USER,zaicev,2

USER,petrov,3

USER,ivanov,1];

SECTION Application должен быть примерно таким:

SECTION Application;

LOAD

     ...,

     [Филиал Клиента] as REDUCTION,

     [Филиал Клиента],

     ...;

FROM ...

Not applicable
Author

У вас все работает, потому что имеется всего 3 склада и все они указаны в Section Access, следовательно у Сидорова будут видны 3 склада.

А если, предположим, всего склада не 3, а 4 и конструкция Section Access будет та же самая, Сидорову будут видны по-прежнему только 3 склада, склад №4 виден не будет.

Anonymous
Not applicable
Author

Нужно просто сделать ещё одну таблицу между фактами и section access. А права раздавать одним по именам а другим например "все"

ScreenShot405.jpg

Not applicable
Author

Спасибо за ответ. Посмотрите пример ниже -  к сожалению, ни один пользователь не увидит продажи        на 5000, т.к. по ним не задан клиент. А требуется, чтобы продвинутые пользователи их видели. Как решить эту проблему?

     

Section AccessТаблица 2КлиентыПродажи
ИмяNTNAMENTNameФилиал клиентаФилиал КлиентаНазвание клиентаId клиентаId клиентаСумма
ИвановIvanovIvanovФилиал 1Филиал 1Ромашка111000
Петров всевсеФилиал 1Филиал 2Лютик223000
СидоровSidorovSidorovФилиал 2 --5000
всеФилиал 2
Anonymous
Not applicable
Author

На самом деле это была только наводка по быстрому из-за отсутствия времени, как такие вещи надо делать. Извините. Теперь правильно: нужно добавить к Section Access ещё одно поле с правами. В дополнительной таблице должны быть все права с мэппингом  к соответствующим филиалам. По этому принципу можно разделять права на филиалы по регионам, областям и т.д.

Unbenannt.JPG

Not applicable
Author

Дополнила ваш пример таблицей с продажами (крайняя справа). Посмотрите, в этом случае пользователь с полным доступом не увидит продажу на сумму 5000:

Безымянный.png

В идеале нужно, чтобы для пользователей с полным доступом SectionAccess вообще не применялся