Добрый день, 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.
1 2 3 4 5 6 7 8 9 10 |
Section Access; SACCESS: LOAD Distinct ACCESS, NTNAME, SubField(GEO_TYPE,';') AS GEO_TYPE FROM QVSA.xls (biff, embedded labels, table is User$); Section Application; |
При помощи 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
П.С. Не забывайте про комментарии. Спасибо, что прочитали 🙂
Ух ты, оказывается функция SubField при использовании внутри LOAD и с отсутствующим index-параметром будет генерировать столько новых строк данных, сколько есть подстрок в текстовой строке!
Не знал этого, хотя в мануале написано, да. Просто красота!