This repository has been archived by the owner on Mar 31, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
465 lines (450 loc) · 19.8 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>État de l'art : Drupal 8 et RGPD - Drupalcamp Paris 2019</title>
<link rel="stylesheet" href="css/reveal.css">
<link rel="stylesheet" href="css/theme/dcp2019.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<h1>État de l'art : Drupal 8 et RGPD</h1>
</section>
<!--section>
<h2>Slide Camp et sponsors</h2>
</section-->
<section data-state="popin">
<h2>RGPD c'est quoi ?</h2>
<p>Règlement Général sur la Protection des Données, qui encadre le traitement des données personnelles.</p>
<p>Adoption : 2016 - Entrée en vigueur : 2018</p>
<aside class="notes">
<h2>Article premier - Objet et objectifs</h2>
<p>Le présent règlement établit des règles relatives à la protection des personnes physiques à l'égard du traitement des données à caractère personnel et des règles relatives à la libre circulation de ces données.</p>
<p>Le présent règlement protège les libertés et droits fondamentaux des personnes physiques, et en particulier leur droit à la protection des données à caractère personnel.</p>
<p>La libre circulation des données à caractère personnel au sein de l'Union n'est ni limitée ni interdite pour des motifs liés à la protection des personnes physiques à l'égard du traitement des données à caractère personnel.</p>
</aside>
</section>
<section>
<section data-state="leave">
<h2>La CNIL </h2>
<p><a href="https://www.cnil.fr">La Commission Nationale de l'Informatique et des Libertés</a>, elle propose plusieurs articles et documents pour informer et accompagner les entreprises dans l'application du RGPD.</p>
<aside class="notes">
<p>Dans l’univers numérique, la Commission Nationale de l'Informatique et des Libertés (CNIL) est le régulateur des données personnelles. Elle accompagne les professionnels dans leur mise en conformité et aide les particuliers à maîtriser leurs données personnelles et exercer leurs droits.</p>
<p>Elle a le statut d'autorité administrative indépendante (AAI). Elle peut contrôler et sanctionner</p>
</aside>
</section>
<section>
<div class="with-col">
<img class="plain col" data-src="img/cnil-e1.jpg">
<div class="col">
<ul class="fragment">
<li class="highlight-blue">Identifier les données</li>
<li class="highlight-blue">Déterminer qui a accès</li>
</ul>
</div>
</div>
</section>
<section>
<div class="with-col">
<img class="plain col" data-src="img/cnil-e2.jpg">
<div class="col">
<ul class="fragment">
<li>Réduire le nombre de données collectées</li>
<li>Mettre en place un contrôle des accès</li>
<li>Supprimer ou archiver automatiquement les données</li>
</ul>
</div>
</div>
</section>
<section>
<div class="with-col">
<img class="plain col" data-src="img/cnil-e3.jpg">
<div class="col">
<ul class="fragment">
<li>Informer et expliquer la collecte des données</li>
<li>Demander préalablement le consentement explicite</li>
<li>Permettre l'opposition, l'accès, la modification des données</li>
</ul>
</div>
</div>
<aside class="notes">
Toute personne a le droit de s’opposer, pour des motifs légitimes, au traitement de ses données, sauf si celui-ci répond à une obligation légale (ex : fichiers des impôts).
</aside>
</section>
<section>
<div class="with-col">
<img class="plain col" data-src="img/cnil-e4.jpg">
<div class="col">
<ul class="fragment">
<li>Maintenir le site à jour</li>
<li>Segmenter les profils utilisateurs</li>
<li>Anonymiser / Chiffrer les données</li>
<li>Informer en cas de "fuite"</li>
</ul>
</div>
</div>
</section>
</section>
<section>
<h2>Alors Drupal ?</h2>
<img class="plain" data-src="img/drupal_search_rgpd.jpg">
<small>22 modules avec le mot clé "GDPR" pour Drupal 8</small>
</section>
<section>
<h2>Drupal core</h2>
<p>RGPD Ready ! En quelque sorte...</p>
<p>L'utilisateur peut voir ses données.</p>
<p>Il peut supprimer son compte et ses données.</p>
<aside class="notes">
<p></p>
</aside>
</section>
<section data-state="modal">
<h2>Drupal GDPR Compliance Team</h2>
<a href="https://www.drupal.org/project/drupal_gdpr_team">https://www.drupal.org/project/drupal_gdpr_team</a>
<p>It's not a module. It's better than that.</p>
<aside class="notes">
Ce projet est destiné à servir de lieu de rencontre pour la communauté Drupal afin de discuter et de coordonner les efforts visant à améliorer la conformité de Drupal au GDPR.
</aside>
</section>
<section data-background="img/wip-tiny.jpg" class="contain">
<aside class="notes">
</aside>
</section>
<section>
<section>
<h3>General Data Protection Regulation (gdpr)</h3>
<p>Dernière version : 8.x-2.0-alpha6 le 02/01/2019</p>
<p>Le module seul fournit une check list de sensibilisation et d'autres sous modules</p>
</section>
<section>
<h3>GDPR - Consent Tracking (gdpr_consent)</h3>
<p>Le module permet de récolter le consentement des utilisateurs.</p>
<p>Il définit une entité et un type de champ.</p>
<aside class="notes">
<p>Attention, on parle ici du sous module pour la version Drupal 8. Il existe un module gdpr_consent pour Drupal 7.</p>
</aside>
</section>
<section>
<h3>GDPR - Fields (gdpr_fields)</h3>
<p>Il propose à l'utilisateur de voir l'ensemble de ces données personnelles.</p>
<p>Côté administrateur on retrouve la liste de tous les champs présent par entité et il est possible de décider pour chacun si l'utilisateur peut y accéder et demander à "oublier" la valeur.</p>
<aside class="notes">
<p>L'administrateur peut aussi configurer une option pour anonymiser l'information au lieu de la supprimer.</p>
</aside>
</section>
<section>
<h3>GDPR - Consent Tracking (gdpr_tasks)</h3>
<p>Le module met en place un système de tâches (comme une demande de suppression ou d'accès) qui peut être utilisées par les visiteur et suivies par les gestionnaires du sites.</p>
<p>Les demandes sont traité par la cron et peuvent être review par des admins.</p>
<aside class="notes">
<p>Demandes d’accès aux données - Subject Access Requests - SARs.</p>
</aside>
</section>
<section>
<h3>GDPR - Obfuscated SQL Dump (gdpr_dump)</h3>
<p>Ce module met à disposition une commande drush et une interface de configuration pour réaliser des dumps de la base de donnée avec protection des informations utilisateurs.</p>
<h4>drush gdpr:sql:dump</h4>
<aside class="notes">
<p>Possible à faire en production, copie les tables, les nettoies puis les dumps.</p>
<p>La commande drush sql-sanitize détruit de la donnée. Ne faire que sur un poste de dev.</p>
<p>Attention à l'option --tables-list qui récupère vraiment la table d'origine. Il faut utiliser le préfix "gdpr_clone_" pour avoir les tables modifiées.</p>
<p>https://github.com/robiningelbrecht/drush-gdpr-dumper</p>
<p>https://github.com/machbarmacher/gdpr-dump</p>
</aside>
</section>
</section>
<section>
<h3>General Data Protection Regulation Compliance (gdpr_compliance)</h3>
<p>Dernière version : 8.x-1.12 le 23/10/2018</p>
<p>Il permet la création d'une page de mentions légales associées à des interfaces de demande de consentement (bandeau, case à cocher dans un formulaire)</p>
<aside class="notes">
<p>Un seul mainteneur.</p>
<p>Ne sauve pas le consentement.</p>
</aside>
</section>
<section>
<h3>IP Anonymize (ip_anon)</h3>
<p>Dernière version : 8.x-1.5 le 17/11/2018</p>
<p>Ce module permet de modifier les ips sauvées en base. Il prend en charge une bonne dizaine de module.</p>
<aside class="notes">
<p>Il est à noter que cela passe par une tâche régulière (cron) et donc il y a un moment où la vrai IP se trouve dans la base de donnée.</p>
</aside>
</section>
<section>
<h3>Cryptolog (cryptolog)</h3>
<p>Dernière version : 8.x-1.3 le 05/12/2018</p>
<p>Le module remplace les ips des visiteurs par une version hashé. L'ip original est temporairement retrouvable mais pas stockée.</p>
<aside class="notes">
<p>Cryptolog nécessite que le PHP soit compilé avec le support des IPv6.</p>
</aside>
</section>
<section data-background="img/cookies-tiny.jpg" class="contain">
<h2>Cookies pour tous !</h2>
<aside class="notes">
</aside>
</section>
<section>
<h3>EU Cookie Compliance (eu_cookie_compliance)</h3>
<p>Dernière version : 8.x-1.2 le 12/07/2018</p>
<p>Un des modules les plus utilisés (depuis 2012).</p>
<p>Il permet la mise en place d'une bannière de demande de consentement pour les cookies du site.</p>
<p>Il ne propose pas encore de choix par cookies ou catégories <a href="https://www.drupal.org/project/eu_cookie_compliance/issues/2989038">mais c'est en cours</a>.</p>
<aside class="notes">
<p>Le module propose un plugin de sauvegarde basique du consentement en base de donnée (IP), avec possibilité de le retirer.</p>
<p>Le module permet aussi de désactiver des javascripts.</p>
<p>80 000 install</p>
<p>https://www.drupal.org/project/eu_cookie_compliance/issues/2989038</p>
</aside>
</section>
<section>
<h3>Cookiebot (cookiebot)</h3>
<p>Dernière version : 8.x-1.0-alpha5 le 31/10/2018</p>
<p>Le module propose une intégration du service tier Cookiebot. La partie visible sur le site est une bannière de consentement aux cookies.</p>
<aside class="notes">
<p>Cookiebot est un service pouvant être payant.</p>
</aside>
</section>
<section>
<h3>CookieConsent (cookieconsent)</h3>
<p>Dernière version : 8.x-1.4 le 02/07/2018</p>
<p>Ce module fait l'intégration de la librairie CookieConsent</p>
<aside class="notes">
<p></p>
</aside>
</section>
<!--section data-state="leave"-->
<section data-state="leave">
<h3>Et bien d'autres</h3>
<p>GDPR Cookie Alert (cookie_gdpr)</p>
<p>Consent (consent) - OIL service</p>
<p>Cookie Control (cookiecontrol) - OIL service</p>
<p>Blizz Vanisher / Tacjs - Tarte au citron</p>
<aside class="notes">
<p>TAC : Faites votre intégration de tarte au citron à la main. Le module utilise la version payante pour un travail incomplet.</p>
</aside>
</section>
<section>
<h3>GDPR Tag Manager (gdpr_tag_manager)</h3>
<p>Dernière version : 8.x-1.1 le 13/12/2018</p>
<p>Le module inclut le Google tag Manager à travers un système respectant la RGPD, bandeau cookie via "cookie consent library", identification du pays du visiteur via l'ip, etc</p>
<p>Attention, si vous utilisez aussi le module GoogleTagManager (google_tag) l'insertion du tag se fera 2 fois.</p>
<aside class="notes">
<p>Un seul mainteneur.</p>
</aside>
</section>
<section>
<h3>D'autres modules 1/2</h3>
<p>Voting API (votingapi) inclut un système d'anonymisation de l'ip du votant.</p>
<p>Smart IP (smart_ip) est un module permettant de définir la position géographique d'un visiteur à partir de son IP. C'est une dépendance de modules comme "EU Cookie Compliance" ou "Weather". Il propose des functions pour supprimer et bloquer les informations obtenues.</p>
</section>
<section>
<h3>D'autres modules 2/2</h3>
<p>deGov Simplenews (degov_simplenews) apporte plusieurs fonctionnalités "RGPD" au module Simplenews". Récolte de consentement, mentions d'informations (privacy policy), etc</p>
<p>Advertising Entity (ad_entity) est un module intégrant plusieurs fournisseurs de publicité et il propose une intégration avec Consent ou EU Cookie Compliance.</p>
</section>
<section>
<h3>Autres Sujets</h3>
<p>Matomo</p>
<p class="fragment">Mailchimp - Mailchimp Popup Block</p>
<p class="fragment">Mask User Data</p>
<p class="fragment">Quantcast ? </p>
<p class="fragment">Matomo</p>
<aside class="notes">
<p>UTILISEZ Matomo, bye bye GA : l'outil propose des options de respect du RGPD pas encore visible dans le module d'intégration (qui de toute façon est optionnel)</p>
<p>Le module et l'api Mailchimp ne fourniraient pas encore de feature RGPD, ce module implémente une pop-up d'inscription compatible.</p>
<p>Mask User Data: Le module permet de lister des champs user qui seront remplacé par des fausses données, pas RGPD, le dump contient les données.</p>
<p>Quantcast, pas de module, mais comme dit juste avant, faites le vous même. Hey au fait on peut configurer l'affichage du bouton de refus dès le début.</p>
</aside>
</section>
<section>
<h2>Crédits</h2>
<p>Images et ressources du site de la <a href="https://www.cnil.fr/">CNIL</a></p>
<p>La présentation "Overview of GDPR contrib modules" de <a href="https://twitter.com/docseee">Dominika Péterová</a>
et <a href="https://twitter.com/BaluErtl">Balu Ertl</a></p>
<p>Photo "Cookies" : Claire Hernandez</p>
<p>Photo "Caution WIP" : <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0 </a><a href="https://www.flickr.com/photos/kevandotorg/">Kevan</a></p>
<aside class="notes">
Le document google est en accès limité il faut demander à Balu Ertl.
</aside>
</section>
<section>
<h2>Merci</h2>
<p><a href="http://happyculture.coop"><img class="plain" src="img/happyculture_long_color.png" /></a></p>
<p><a href="https://drupal.org/user/116397">Guillaume Bec</a> - <a href="https://twitter.com/Bes_fr/">@Bes_fr</a></p>
<img class="plain" src="img/bes-do-lul.jpg" />
<p>[email protected]</p>
<aside class="notes">
</aside>
</section>
<section data-state="feedback">
<h2>C'est à vous !</h2>
<aside class="notes">
</aside>
</section>
<!--section>
<h2>Slide</h2>
<aside class="notes">
</aside>
</section-->
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
dependencies: [
{ src: 'plugin/markdown/marked.js' },
{ src: 'plugin/markdown/markdown.js' },
{ src: 'plugin/notes/notes.js', async: true },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
Reveal.enableJoke = false;
Reveal.addEventListener('popin', function() {
if (Reveal.enableJoke === true) {
var html = '<h3>Pssst, Tu veux un cookie ?</h3><sup>Oui !</sup><small>non</small>';
var popup = document.createElement('div');
popup.innerHTML = html;
popup.setAttribute('id', 'sliding-popup');
popup.style.height = 'auto';
popup.style.width = '100%';
popup.style.display = 'none';
this.appendChild(popup);
var height = '80px';
popup.style.display = '';
if (popup.classList) {
popup.classList.add('sliding-popup-bottom');
}
else {
popup.className += ' ' + 'sliding-popup-bottom';
}
popup.style.bottom = 0;
popup.animate([{bottom: '-80px'}, {bottom: 0}], 2000);
var revealdom = this;
popup.onclick = function () {
revealdom.removeChild(this);
};
}
}, false );
Reveal.addEventListener('modal', function () {
if (Reveal.enableJoke === true) {
var html = '<div class="joke-modal"><div class="joke-modal-content"><span class="joke-close-button">×</span><h1>Hey, Listen !</h1><p>Inscrit toi à ma newsletter !</p><img src="img/The_Legend_of_Zelda_-_Fairy.svg" /></div></div>';
var modal = document.createElement('div');
modal.innerHTML = html;
this.appendChild(modal);
var revealdom = this;
modal.onclick = function () {
revealdom.removeChild(this);
};
setTimeout(function () {
if (modal.getElementsByClassName("joke-modal")[0].classList) {
modal.getElementsByClassName("joke-modal")[0].classList.add('joke-show-modal');
}
else {
modal.getElementsByClassName("joke-modal")[0].className += ' ' + 'joke-show-modal';
}
}, 2000);
}
}, false );
Reveal.addEventListener('leave', function () {
if (Reveal.enableJoke === true) {
var revealdom = this;
var popupCounter = 0;
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
if (popupCounter < 1) {
var html = '<div class="joke-modal"><div class="joke-modal-content"><span class="joke-close-button">×</span><h2>Vous partez déjà ?</h2><p>À bientôt... Revenez vite !</p></div></div>';
var modal = document.createElement('div');
modal.innerHTML = html;
revealdom.appendChild(modal);
modal.onclick = function () {
revealdom.removeChild(this);
};
setTimeout(function () {
if (modal.getElementsByClassName("joke-modal")[0].classList) {
modal.getElementsByClassName("joke-modal")[0].classList.add('joke-show-modal');
}
else {
modal.getElementsByClassName("joke-modal")[0].className += ' ' + 'joke-show-modal';
}
}, 10);
}
popupCounter++;
}
});
}
}, false );
Reveal.addEventListener('feedback', function () {
if (Reveal.enableJoke === true) {
var html = '<span>Feedback</span>';
var popup = document.createElement('div');
popup.innerHTML = html;
popup.setAttribute('id', 'side-feed');
popup.style.height = 'auto';
popup.style.width = 'auto';
//popup.style.display = 'none';
this.appendChild(popup);
popup.style.display = '';
if (popup.classList) {
popup.classList.add('sliding-side-feed');
}
else {
popup.className += ' ' + 'sliding-side-feed';
}
popup.style.right = 0;
popup.animate([{right: '-150px'}, {right: 0}], 1000);
var revealdom = this;
var htmlmod = '<div class="joke-modal"><div class="joke-modal-content feedback-joke"><span class="joke-close-button">×</span><h2>Alors ça vous a plu ?</h2><p>Oui</p> <p>Super!</p> <p>Meh</p></div></div>';
var modal = document.createElement('div');
modal.innerHTML = htmlmod;
modal.onclick = function () {
revealdom.removeChild(this);
};
popup.onclick = function () {
revealdom.appendChild(modal);
if (modal.getElementsByClassName("joke-modal")[0].classList) {
modal.getElementsByClassName("joke-modal")[0].classList.add('joke-show-modal');
}
else {
modal.getElementsByClassName("joke-modal")[0].className += ' ' + 'joke-show-modal';
}
};
popup.onmouseover = function () {
popup.animate([{right: 0}, {right: '10px'}], 100);
popup.style.right = '10px';
};
popup.onmouseleave = function () {
popup.style.right = 0;
};
}
}, false );
function addEvent(obj, evt, fn) {
if(obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
</script>
</body>
</html>