Code source wiki de Live Security

Version 2.1 par mrochelle le 2020/08/05 16:18

Afficher les derniers auteurs
1 {{toc/}}
2
3 ----
4
5 = Définir la fonction Live Security =
6
7 Ouvrir le modèle de donnée dans lequel vous souhaitez ajouter la fonction de live Security
8 [[image:https://lh5.googleusercontent.com/2C5BDoV-7uXAghqZzF6CTnBYtY-3fndDl4HVNnj59KoaQYc3AvCOBiILSUmM_5dIR0qC7eUdOHXBGvsFXtxeskh0b1rgpBrP6Bfy8C-sborNfIsmmkrO1bH7KsPi1Vpq1Aoi2xTA81I||height="517" width="964"]]
9
10 Ajouter la fonction dans la section “SELTRANS” du dictionnaire de fonction (fonction à dupliquer et modifier entre (% style="color:#e67e22" %)**/* START CONFIG */**(%%) et (% style="color:#e67e22" %)**/* END CONFIG */**(%%) dans les commentaire de cette diapositive)
11
12 {{code language="js"}}
13 /* START CONFIG */
14 //version: 2019R2
15 var securedDims = {};
16 securedDims["Région"] = getUserAttribute("region");
17
18 /* Ajouter ici les autres dimensions sur lequel du live security doit s’appliquer */
19 /*
20 securedDims["DIMENSION_NAME_2"] = getUserAttribute("USER_PARAM_2");
21 */
22
23 /* END CONFIG */
24
25 /* MODIFY THE SCRIPT BELOW WITH CAUTION */
26 var sLogPrefix = "[LIVE_SECURITY] [live-sec-thread-" + Math.floor(Math.random()*16777215).toString(16) + "]"; /* 16777215 is FFFFFF in decimal */
27
28 for (var dimId in securedDims)
29 {
30 var dim = selection.dm.objName[dimId];
31 var persoVal = securedDims[dimId];
32
33 //Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + "Applying user filters on: " + dimId + ", persoVal:" + persoVal);
34 if (dim)
35 {
36 if (persoVal == null || persoVal.length == 0)
37 {
38 // user must no see any value
39 var persoValuesTab = ["-noval-"];
40 var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
41 selection.setFilter(filt);
42 Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Filters (members) on " + dimId + ": [" + persoValuesTab + "]");
43 }
44 else if (persoVal && persoVal != ".*")
45 {
46 //user is limited to some value(s)
47 var persoValuesTab = persoVal.split("|");
48 Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Applying user filters on " + dimId + ": [" + persoValuesTab + "]");
49
50 var exFilter = selection.filterByDimName[dimId];
51 if (!exFilter)
52 {
53 //there is no exisitng filter on that dimension => create a new one
54 var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
55 selection.setFilter(filt);
56 Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (members) on " + dimId + ": [" + persoValuesTab + "]");
57 }
58 else
59 {
60 //there is already a filter on that dimension => merge (intersect) into a new one
61 var filt = new FilterSelection(dim, -1, -1, [], persoValuesTab);
62 filt.recalcIds();
63 exFilter.recalcIds();
64 exFilter = mergeFilters(exFilter, filt);
65 origIdsTab = exFilter.origIds;
66 selection.setFilter(exFilter);
67 Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters (origIds) on " + dimId + ": [" + exFilter.origIds + "]");
68 }
69 }
70 else // perso value is .*
71 {
72 // do nothing, user can see everything
73 Packages.com.digdash.utils.MessageStack.getInstance().addDebug(sLogPrefix + " Resolved filters on " + dimId + ": All (.*)");
74 }
75 }
76 else
77 {
78 Packages.com.digdash.utils.MessageStack.getInstance().addError(sLogPrefix + " Dimension " + dimId + "not found");
79 }
80 }
81 {{/code}}
82
83 = Attribut Utilisateur =
84
85 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).
86 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.
87 [[image:https://lh3.googleusercontent.com/pi0GKHieoUS7OOnI0ve5AoidI7shqXqnm4l6mfDTFFZsKvWyOSF6xt_5Pw_X2x9epy5w6AIXF8uhO1l-UdrtB9pPcXCQFT-gQ_a3jGaxbQHdXejAaNEz2YmgkQ1jmmb8OZXAOibXj1g||height="378" width="743"]]
88
89 = Live Security pour interdire l’affichage d’une mesure =
90
91 {{code language="js"}}
92 var show_measure = getUserAttribute('show_measure');
93 var measureId = 'CA'; // id of the measure to hide
94
95 if (show_measure == 'non')
96 {
97 var measIndex = selection.indexOfMeasure(measureId);
98 if (measIndex > 0)
99 selection.removeMeasure(measIndex);
100 }
101 {{/code}}