Добрый день, коллеги! Сегодня 23 февраля, а для России это, по традиции, день Защитника Отечества. Всех защитников родины поздравляю с этим праздником, но, а для нас, разработчиков бизнес-приложений, хочу написать свой вариант статьи для защитника, но не Отечества, а приложения Qlik. Сегодня речь пойдет о том, как защитить свое приложение и обеспечить его безопасность. Итак, будем говорить о Section Access

Section Access: Применение

Section Access, как правило, используется в двух случаях:

1. защита данных для доступа других лиц.

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

Давайте рассмотрим на примерах, как можно использовать этот полезный функционал.

Section Access: Как скрыть лист или объект от неавторизованного пользователя

Многие из вас знают, что Section Access дает возможность фильтровать данные, но также и позволяет достигать две другие цели одновременно. Поэтому рассмотрим здесь, как расширить его использование для обеспечения безопасности объектов в дэшборде QlikView, используя возможности безопасности приложений.

НА ЗАМЕТКУ! Вы можете настроить предложенное решение под собственные нужды. Предложенный вариант был протестирован в QlikView 11, но он должен также работать и в более ранних версиях.

Рассмотрим такой пример: у вас есть два листа в вашем документе QlikView, в которых вы хотите задать правила безопасности на основе статуса пользователей в группе Active Directory или по их логину. В примере используется база данных, которая данные авторизаций, при этом может быть использована встроенная таблица. Источник данных состоит из следующих столбцов:  ACCESS, NTNAME, SAUSER, TABACCESS.SHEET1, TABACCESS.SHEET2 и FIELDACCESS.DIVISIONFILTER.

  • ACCESS – определяет уровень доступа, которым обладает пользователь в приложении, когда оно открывается дизайнером. Доступные значения ADMIN или USER. Одновременно и название колонки, и ее содержимое должно быть в больших буквах.
  • NTNAME – имя группы Active Directory или имя пользователя, который выполняет вход. Имя колонки должно быть в заглавных буквах, а значение должно быть в форме Домен\Имяпользователя. Вы можете посмотреть пример, написав в текстовом объекте в интерфейсе документа QlikView =OSUSER(). Значение должно быть большими буквами.
  • SAUSER – это ключ, по которому мы будем фильтровать наши данные. начение должно быть большими буквами.
  • TABACCESS.SHEET1 – целое число, где 0 = Ложь и 1 = Истина. Значение используется для определения, возможен ли доступ пользователю к этому листу или объекту.
  • TABACCESS.SHEET2 – целое число, где 0 = Ложь и 1 = Истина. Значение используется для определения, возможен ли доступ пользователю к этому листу или объекту.
  • FIELDACCESS.DIVISIONFILTER – Значение строки, используемое для сырой фильтрации данных.

Список ниже объясняет условия для колонок TABACESS, применяемых в Section Access.

  • Название колонок может быть любым, что доносит какой-то смысл для организации, хорошо, когда они соответствуют стандартам программирования, принятым у вас в компании.
  • Условие названия, используемое здесь, приближено к такому, как работает в QlikView. Tt показывает, что доставляется (TABACESS) и к чему (SHEETX). Оно может быть расширено OBJECTACCESS, VARIABLES и другими.

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

На первом шаге загружаем таблицу Section Access. Поле SAUSER используется для фильтрации, а колонка NTNAME копируется.

Section Access;
SATABLE:
LOAD
ACCESS,
NTNAME,
SAUSER
FROM
AppConfig.xlsx
(ooxml, embedded labels, table is App1);

Section Application;

На втором шаге создается таблица внутри модели данных, которая содержит поля TABACCESS, а также другие необходимые поля для атворизации. Заметьте поле Division, которое контролируют, как пользователи в Divisions имеют доступ.

DocSecurity:
LOAD
SAUSER,
TABACCESS.SHEET1,
TABACCESS.SHEET2,
FIELDACCESS.DIVISIONFILTER as Division
FROM
AppConfig.xlsx
(ooxml, embedded labels, table is SheetAuthorization);

Полный скрипт:

SET ThousandSep=’,’;
SET DecimalSep=’.’;
SET MoneyThousandSep=’,’;
SET MoneyDecimalSep=’.’;
SET MoneyFormat=’$#,##0.00;($#,##0.00)’;
SET TimeFormat=’h:mm:ss TT’;
SET DateFormat=’M/D/YYYY’;
SET TimestampFormat=’M/D/YYYY h:mm:ss[.fff] TT’;
SET MonthNames=’Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec’;
SET DayNames=’Mon;Tue;Wed;Thu;Fri;Sat;Sun’;

star is *;

Section Access;
SATABLE:
LOAD
ACCESS,
NTNAME,
SAUSER
FROM
AppConfig.xlsx
(ooxml, embedded labels, table is App1);

Section Application;

DocSecurity:
LOAD
SAUSER,
TABACCESS.SHEET1,
TABACCESS.SHEET2,
FIELDACCESS.DIVISIONFILTER as Division
FROM
AppConfig.xlsx
(ooxml, embedded labels, table is App1);

FACTTABLE:
LOAD * INLINE [
Division, Date, Product, ProductSku, Qty, Amt
North, 01/10/2009, Widgets 1, ABCD-1234, 52, 220.0097
South, 01/10/2009, Widgets 1, ABCD-1234, 52, 220.0097
South, 01/11/2009, Widgets 2, EFGH-1234, 10, 120.0000
];

Вот так выглядит наш источник данных Excel.


Прежде чем обновить документ QlikView, убедитесь что:

  1. Данные были верно скомпилированы.
  2. Одновременно и листы, и подразделы доступны на основе документа Excel.

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

Снова выполнена перезагрузка, а документ переоткрыт. Ниже приведу список выражений, который используется для доступа к листу:

TABACCESS.SHEET1 =1

Доступ к другим листам и объектам реализован на основе аналогичного подхода. Меняется настройка полей.

 

Надеюсь, данная статья расширила для вас возможности использования Section Access.

Еще раз, поздравляю всех с 23 февраля! Желаю провести эти выходные дни с пользой!