Section Access: разграничение прав доступа к данным

Добрый день, Qlik-мир! Сегодня расскажу, как разграничить доступ к данным на основе Section Access.

Разграничения данных по SACCESS – довольно простая и при этом полезная вещь, не требующая большого количества кода.  Фактически идёт простое добавление ещё одной таблицы, в которой прописываются ограничения.

Section Access: разграничиваем права доступа к данным

Разграничение доступа к данным происходит через добавление к стандартным полям в таблице Section Access тех полей, по которым происходит разграничение.

Безусловно, о Section Access можно прочитать подробно в справочном руководстве по QlikView в разделе 29. Но ведь всем известно, что большинство людей обращается к инструкции, когда уже ничего не помогает, поэтому в этом посте – кратко о том, как ограничить доступ пользователей к определенным данным.

Есть стандартные поля:

  • ACCESS
  • USERID
  • PASSWORD
  • SERIAL
  • NTNAME
  • NTDOMAINSID
  • NTSID
  • OMIT

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

Section Access: приступаем к работе

Давайте предположим, что у нас есть 6 типов регионов (GEO_TYPE), и к каждому из этих типов мы хотим предоставить доступ только одному человеку.

Это можно сделать двумя способами.

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

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

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

Итак, для начала сделаем нашу табличку. Её можно как загружать INLINE, прописывая всё в скрипте, так и загружая сам файл.

ACCESS NTNAME GEO_TYPE
ADMIN DOMAINNAME1\ADMIN1 *
ADMIN DOMAINNAME2\ADMIN2 100;200;300;400;500;600
USER DOMAINNAME1\USER1 100
USER DOMAINNAME2\USER2 100;200

Я занесу эту табличку в EXCEL-файл и загружу ее из EXCEL.

При помощи SubField(GEO_TYPE,’;’) мы разделяем одну ячейку, чтобы связать данные из столбца GEO_TYPE  с таким же столбцом в данных и потом сделать срез.

Если мы поставим «*» , это равносильно тому, что мы прописали все возможные значения.

НА ЗАМЕТКУ! Для пользователя от имени, которого будет происходить перезагрузка на сервере, желательно ставить «*» или все возможные значения. В ACCESS надо прописывать ADMIN, иначе он может либо сохранить уже обрезанный файл, либо и вовсе его не сохранить из-за недостаточности прав.

ВНИМАНИЕ: В таблице SACCESS названия столбцов обязательно должны быть прописаны заглавными буквами или цифрами. Значения в них тоже должны содержать в себе только заглавные буквы или цифры. Скрипт для SACCESS пишется исключительно в Hidden Script.

Section Access: настройка прав доступа

После добавления SACCESS и перезагрузки, мы увидим, что ничего не изменилось. Данные отображаются, как и прежде, даже если у нас указано, что нам можно видеть только 100 и 200 тип.

Чтобы всё работало надо включить в настройках обрезание данных по SACCESS. Заходим в Settings → Document Properties → Opening  и ставим галочки:

  • Initial Data Reduction Based on Section Access
    • Strict Exclusion

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

Так как мы сами указываем в файле кто админ, а кто пользователь, то нам надо заглянуть ещё на закладку Security и убрать все галочки, кроме последней, «Admin Override Security»:

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

ВНИМАНИЕ: Если вы хотите протестировать на себе права USER, создайте лучше копию приложения, потому что вы не сможете изменить приложение, будучи с такими правами, и вернуть права ADMIN себе.

На этом сегодня все. До новых встреч здесь, на qlikdaily.ru

П.С. Не забывайте про комментарии. Спасибо, что прочитали  🙂

Комментарии

  • Март 1, 2016 at 12:21
    Permalink

    Ух ты, оказывается функция SubField при использовании внутри LOAD и с отсутствующим index-параметром будет генерировать столько новых строк данных, сколько есть подстрок в текстовой строке!
    Не знал этого, хотя в мануале написано, да. Просто красота!

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Подпишись на Data-Daily!

Введите email и будьте в курсе!

Подпишись!