Live Security
Version 2.1 par mrochelle le 2020/08/05 16:18
- Définir la fonction Live Security
- Attribut Utilisateur
- Live Security pour interdire l’affichage d’une mesure
Définir la fonction Live Security
Ouvrir le modèle de donnée dans lequel vous souhaitez ajouter la fonction de live Security
Ajouter la fonction dans la section “SELTRANS” du dictionnaire de fonction (fonction à dupliquer et modifier entre /* START CONFIG */ et /* END CONFIG */ dans les commentaire de cette diapositive)
/* START CONFIG */
//version: 2019R2
var securedDims = {};
securedDims["Région"] = getUserAttribute("region");
/* Ajouter ici les autres dimensions sur lequel du live security doit s’appliquer */
/*
securedDims["DIMENSION_NAME_2"] = getUserAttribute("USER_PARAM_2");
*/
/* END CONFIG */
/* MODIFY THE SCRIPT BELOW WITH CAUTION */
var sLogPrefix = "[LIVE_SECURITY] [live-sec-thread-" + Math.floor(Math.random()*16777215).toString(16) + "]"; /* 16777215 is FFFFFF in decimal */
for (var dimId in securedDims)
{
var dim = selection.dm.objName[dimId];
var persoVal = securedDims[dimId];
//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Applying user filters on: " + dimId + ", persoVal:" + persoVal);
if (dim)
{
if (persoVal == null || persoVal.length == 0)
{
// user must no see any value
var persoValuesTab = ["-noval-"];
var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
selection.setFilter(filt);
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Filters (members) on " + dimId + ": [" + persoValuesTab + "]");
}
else if (persoVal && persoVal != ".*")
{
//user is limited to some value(s)
var persoValuesTab = persoVal.split("|");
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab + "]");
var exFilter = selection.filterByDimName[dimId];
if (!exFilter)
{
//there is no exisitng filter on that dimension => create a new one
var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
selection.setFilter(filt);
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (members) on " + dimId + ": [" + persoValuesTab + "]");
}
else
{
//there is already a filter on that dimension => merge (intersect) into a new one
var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
filt.recalcIds();
exFilter.recalcIds();
exFilter = mergeFilters(exFilter, filt);
origIdsTab = exFilter.origIds;
selection.setFilter(exFilter);
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (origIds) on " + dimId + ": [" + exFilter.origIds + "]");
}
}
else // perso value is .*
{
// do nothing, user can see everything
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters on " + dimId + ": All (.*)");
}
}
else
{
Packages.com.digdash.utils.MessageStack.getInstance().addError(sLogPrefix + " Dimension " + dimId + "not found");
}
}
//version: 2019R2
var securedDims = {};
securedDims["Région"] = getUserAttribute("region");
/* Ajouter ici les autres dimensions sur lequel du live security doit s’appliquer */
/*
securedDims["DIMENSION_NAME_2"] = getUserAttribute("USER_PARAM_2");
*/
/* END CONFIG */
/* MODIFY THE SCRIPT BELOW WITH CAUTION */
var sLogPrefix = "[LIVE_SECURITY] [live-sec-thread-" + Math.floor(Math.random()*16777215).toString(16) + "]"; /* 16777215 is FFFFFF in decimal */
for (var dimId in securedDims)
{
var dim = selection.dm.objName[dimId];
var persoVal = securedDims[dimId];
//Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Applying user filters on: " + dimId + ", persoVal:" + persoVal);
if (dim)
{
if (persoVal == null || persoVal.length == 0)
{
// user must no see any value
var persoValuesTab = ["-noval-"];
var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
selection.setFilter(filt);
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Filters (members) on " + dimId + ": [" + persoValuesTab + "]");
}
else if (persoVal && persoVal != ".*")
{
//user is limited to some value(s)
var persoValuesTab = persoVal.split("|");
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab + "]");
var exFilter = selection.filterByDimName[dimId];
if (!exFilter)
{
//there is no exisitng filter on that dimension => create a new one
var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
selection.setFilter(filt);
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (members) on " + dimId + ": [" + persoValuesTab + "]");
}
else
{
//there is already a filter on that dimension => merge (intersect) into a new one
var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
filt.recalcIds();
exFilter.recalcIds();
exFilter = mergeFilters(exFilter, filt);
origIdsTab = exFilter.origIds;
selection.setFilter(exFilter);
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (origIds) on " + dimId + ": [" + exFilter.origIds + "]");
}
}
else // perso value is .*
{
// do nothing, user can see everything
Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters on " + dimId + ": All (.*)");
}
}
else
{
Packages.com.digdash.utils.MessageStack.getInstance().addError(sLogPrefix + " Dimension " + dimId + "not found");
}
}
Attribut Utilisateur
Prendre le soin de créer le paramètre utilisateur USER_PARAM_1 et de l’avoir renseigné pour les utilisateurs concernés (Saisie “.*” pour les autres).
Dans l’exemple ci-dessous, admin aura le droit de voir les lignes de la dimension DIMENSION_NAME_1 ou les valeurs A, B ou C apparaissent.
Live Security pour interdire l’affichage d’une mesure
var show_measure = getUserAttribute('show_measure');
var measureId = 'CA'; // id of the measure to hide
if (show_measure == 'non')
{
var measIndex = selection.indexOfMeasure(measureId);
if (measIndex > 0)
selection.removeMeasure(measIndex);
}
var measureId = 'CA'; // id of the measure to hide
if (show_measure == 'non')
{
var measIndex = selection.indexOfMeasure(measureId);
if (measIndex > 0)
selection.removeMeasure(measIndex);
}