gdpr added
This commit is contained in:
parent
9268ac8e13
commit
c86b41c48a
@ -1 +1 @@
|
|||||||
__version__ = '0.1.28'
|
__version__ = '0.1.29'
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
6
rugwebsite/forms.py
Executable file
6
rugwebsite/forms.py
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
from django import forms
|
||||||
|
|
||||||
|
|
||||||
|
class RequestGDPRDelete(forms.Form):
|
||||||
|
email = forms.EmailField(widget=forms.EmailInput)
|
||||||
|
|
43
rugwebsite/migrations/0001_initial.py
Normal file
43
rugwebsite/migrations/0001_initial.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.7 on 2018-05-04 11:30
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='GDPRAgreed',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('agreed_at', models.DateTimeField()),
|
||||||
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='PendingGDPRAgree',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('token', models.TextField()),
|
||||||
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='PendingGDPRDelete',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('token', models.TextField()),
|
||||||
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,71 @@
|
|||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.contrib.auth.signals import user_logged_out
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.contrib.sessions.models import Session
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from django.core.mail import EmailMultiAlternatives
|
||||||
|
from django.template.loader import get_template
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
class GDPRAgreed(models.Model):
|
||||||
|
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
|
||||||
|
agreed_at = models.DateTimeField()
|
||||||
|
|
||||||
|
|
||||||
|
class PendingGDPRAgree(models.Model):
|
||||||
|
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
|
||||||
|
token = models.TextField()
|
||||||
|
|
||||||
|
def agree(self):
|
||||||
|
GDPRAgreed(user=self.user, agreed_at=timezone.now()).save()
|
||||||
|
self.delete()
|
||||||
|
|
||||||
|
def email(self):
|
||||||
|
html_content = get_template('rugwebsite/email/gdpr_consent.html').render(
|
||||||
|
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
|
||||||
|
)
|
||||||
|
text_content = get_template('rugwebsite/email/gdpr_consent.txt').render(
|
||||||
|
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
|
||||||
|
)
|
||||||
|
msg = EmailMultiAlternatives(
|
||||||
|
'Over uw persoonsgegevens',
|
||||||
|
text_content,
|
||||||
|
'no-reply@cosmo.service.rug.nl',
|
||||||
|
[self.user.email])
|
||||||
|
msg.attach_alternative(html_content, "text/html")
|
||||||
|
msg.send()
|
||||||
|
|
||||||
|
|
||||||
|
class PendingGDPRDelete(models.Model):
|
||||||
|
user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
|
||||||
|
token = models.TextField()
|
||||||
|
|
||||||
|
def forget(self, request):
|
||||||
|
self.user.username = 'deleted_at_{}'.format(timezone.now())
|
||||||
|
self.user.first_name = ''
|
||||||
|
self.user.last_name = ''
|
||||||
|
self.user.email = ''
|
||||||
|
self.user.is_active = False
|
||||||
|
self.user.save()
|
||||||
|
user_logged_out.send(sender=self.user.__class__, request=request, user=self.user)
|
||||||
|
self.delete()
|
||||||
|
|
||||||
|
def email(self):
|
||||||
|
html_content = get_template('rugwebsite/email/gdpr_delete.html').render(
|
||||||
|
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
|
||||||
|
)
|
||||||
|
text_content = get_template('rugwebsite/email/gdpr_delete.txt').render(
|
||||||
|
{'user': self.user, 'token': self.token, 'url': settings.SITE_URL}
|
||||||
|
)
|
||||||
|
|
||||||
|
msg = EmailMultiAlternatives(
|
||||||
|
'Verzoek verwijdering persoonsgegevens',
|
||||||
|
text_content,
|
||||||
|
'cosmo@rug.nl',
|
||||||
|
[self.user.email])
|
||||||
|
msg.attach_alternative(html_content, "text/html")
|
||||||
|
msg.send(fail_silently=False)
|
@ -1,4 +1,5 @@
|
|||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" style="background: #fff;">
|
<html lang="en" style="background: #fff;">
|
||||||
<head>
|
<head>
|
||||||
@ -41,24 +42,30 @@
|
|||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<li class="rug-nav--meta__item rug-mr-xs">
|
<li class="rug-nav--meta__item rug-mr-xs">
|
||||||
{% block accountlink %}<a href="#" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Welcome {{ user.get_username }}</span></a>{% endblock %}
|
{% block accountlink %}<a href="#" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Welcome {{ user.get_username }}</span></a>{% endblock %}
|
||||||
{% comment %}<div class="rug-nav--meta__flyout">
|
<div class="rug-nav--meta__flyout">
|
||||||
<ul class="rug-list--unstyled">
|
<ul class="rug-list--unstyled">
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'logout' %}?next={{ request.path }}" data-opener="logout" class="js--popup-opener"><span aria-hidden="true" class="rug-icon rug-icon--caret-right rug-mr-xs"></span>Log out</a>
|
<a href="{% url 'logout' %}?next={{ request.path }}" data-opener="logout" class="js--popup-opener"><span aria-hidden="true" class="rug-icon rug-icon--caret-right rug-mr-xs"></span>Log out</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>{% endcomment %}
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="rug-nav--meta__item rug-mr-xs">
|
||||||
|
<a href="{% url 'gdpr' %}" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>About personal data</span></a>
|
||||||
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li class="rug-nav--meta__item rug-mr-xs">
|
<li class="rug-nav--meta__item rug-mr-xs">
|
||||||
<a href="{% url 'saml:saml2_auth' %}?provider=RuG" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Login via the University of Groningen Single Sign on.</span></a>
|
<a href="{% url 'saml:saml2_auth' %}?provider=RuG" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>Login via the University of Groningen Single Sign on.</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="rug-nav--meta__item rug-mr-xs">
|
||||||
|
<a href="{% url 'gdpr' %}" class=""><span class="rug-icon rug-icon--user rug-mr-xs" aria-hidden="true"></span><span>About personal data</span></a>
|
||||||
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated or shownav %}
|
||||||
<div class="rug-background-menu rug-shadow-box-inset">
|
<div class="rug-background-menu rug-shadow-box-inset">
|
||||||
<div class="rug-nav-left-white"></div>
|
<div class="rug-nav-left-white"></div>
|
||||||
<div class="rug-nav-center-1600">
|
<div class="rug-nav-center-1600">
|
||||||
|
38
rugwebsite/templates/rugwebsite/email/gdpr_consent.html
Normal file
38
rugwebsite/templates/rugwebsite/email/gdpr_consent.html
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<p>Beste {{ user.first_name }} {{ user.last_name }},</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Omdat vanaf 25 mei aanstaande nieuwe privacy-wetgeving van de EU ingaat, willen wij u informeren over de
|
||||||
|
persoonsgegevens die wij van u hebben. U heeft in het verleden gebruik gemaakt van
|
||||||
|
{% block gdpr_title %}Super Awesome Website{% endblock %} door in te loggen met uw centrale RUG personeels-
|
||||||
|
of studentnummer en wachtwoord. Toen zijn uw RUG e-mailadres, voornaam, achternaam en student- of personeelsnummer
|
||||||
|
gekopieerd naar onze database. Op die manier kunt u inloggen en gebruik maken van onze website.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Samengevat worden de gegevens gebruikt voor authenticatie op onze website en in sommige gevallen voor het
|
||||||
|
beoordelen van vakgebonden opdrachten die u via onze website maakt. Meer informatie vind u op de volgende pagina.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="{{ url }}{% url 'gdpr-agree' user.email token %}">{{ url }}{% url 'gdpr-agree' user.email token %}</a>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Wij willen u vragen voor 25 mei aanstaande toestemming te geven om deze gegevens te bewaren. Doet u dat niet,
|
||||||
|
dan verdwijnt uw
|
||||||
|
account op 25 mei. U kunt dan wel opnieuw inloggen, maar dan wordt er een nieuw account aangemaakt en heeft
|
||||||
|
geen toegang meer tot gegevens die voorheen aan uw account gebonden waren en niet uw persooonsgegevens zijn.
|
||||||
|
|
||||||
|
Mogelijk betekent dat ook opdrachten die nog niet officieel beoordeeld zijn, dan niet meer beoordeeld kunnen worden,
|
||||||
|
omdat niet meer te achterhalen valt wie die heeft uitgevoerd. Mocht u nog wachten op zo'n beoordeling maar wel uw
|
||||||
|
persoonsgegevens willen verwijderen, dan adviseren wij u eerst akkoord te gaan, maar na de officiele beoordeling uw
|
||||||
|
persoonsgegevens alsnog te verwijderen. Dat kan eenvoudig via een link op de website.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Geeft u wel toestemming dan kunt u later alsnog uw persoonsgegevens verwijderen. <strong>Met de volgende link kunt
|
||||||
|
u toestemming geven, door op "Toestemming geven" te klikken.</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="{{ url }}{% url 'gdpr-agree' user.email token %}?agree">{{ url }}{% url 'gdpr-agree' user.email token %}?agree</a>
|
||||||
|
|
||||||
|
<p>Met vriendelijke groet,</p>
|
||||||
|
<p>{% block gdpr_close %}Super Awesome Website{% endblock %}</p>
|
35
rugwebsite/templates/rugwebsite/email/gdpr_consent.txt
Normal file
35
rugwebsite/templates/rugwebsite/email/gdpr_consent.txt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
Beste {{ user.first_name }} {{ user.last_name }},
|
||||||
|
|
||||||
|
Omdat vanaf 25 mei aanstaande nieuwe privacy-wetgeving van de EU ingaat, willen wij u informeren over de
|
||||||
|
persoonsgegevens die wij van u hebben. U heeft in het verleden gebruik gemaakt van
|
||||||
|
{% block gdpr_title %}Super Awesome Website{% endblock %} door in te loggen met uw centrale RUG personeels-
|
||||||
|
of studentnummer en wachtwoord. Toen zijn uw RUG e-mailadres, voornaam, achternaam en student- of personeelsnummer
|
||||||
|
gekopieerd naar onze database. Op die manier kunt u inloggen en gebruik maken van onze website.
|
||||||
|
|
||||||
|
|
||||||
|
Samengevat worden de gegevens gebruikt voor authenticatie op onze website en in sommige gevallen voor het
|
||||||
|
beoordelen van vakgebonden opdrachten die u via onze website maakt. Meer informatie vind u op de volgende pagina.
|
||||||
|
|
||||||
|
|
||||||
|
{{ url }}{% url 'gdpr-agree' user.email token %}
|
||||||
|
|
||||||
|
|
||||||
|
Wij willen u vragen voor 25 mei aanstaande toestemming te geven om deze gegevens te bewaren. Doet u dat niet,
|
||||||
|
dan verdwijnt uw account op 25 mei. U kunt dan wel opnieuw inloggen, maar dan wordt er een nieuw account aangemaakt
|
||||||
|
en heeft geen toegang meer tot gegevens die voorheen aan uw account gebonden waren en niet uw persooonsgegevens zijn.
|
||||||
|
|
||||||
|
Mogelijk betekent dat ook opdrachten die nog niet officieel beoordeeld zijn, dan niet meer beoordeeld kunnen worden,
|
||||||
|
omdat niet meer te achterhalen valt wie die heeft uitgevoerd. Mocht u nog wachten op zo'n beoordeling maar wel uw
|
||||||
|
persoonsgegevens willen verwijderen, dan adviseren wij u eerst akkoord te gaan, maar na de officiele beoordeling uw
|
||||||
|
persoonsgegevens alsnog te verwijderen. Dat kan eenvoudig via een link op de website.
|
||||||
|
|
||||||
|
|
||||||
|
Geeft u wel toestemming dan kunt u later alsnog uw persoonsgegevens verwijderen. Met de volgende link geeft
|
||||||
|
u toestemming.
|
||||||
|
|
||||||
|
|
||||||
|
{{ url }}{% url 'gdpr-agree' user.email token %}?agree
|
||||||
|
|
||||||
|
|
||||||
|
Met vriendelijke groet,
|
||||||
|
{% block gdpr_close %}Super Awesome Website{% endblock %}
|
26
rugwebsite/templates/rugwebsite/email/gdpr_delete.html
Normal file
26
rugwebsite/templates/rugwebsite/email/gdpr_delete.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<p>Beste {{ user.first_name }} {{ user.last_name }},</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Op uw verzoek sturen we u een link om uw persoonsgegevens van
|
||||||
|
{% block gdpr_title %}Super Awesome Website{% endblock %}
|
||||||
|
te verwijderen. Wanneer u uw persoonsgegevens verwijdert, wordt ook uw personeels- of studentnummer verwijderd.
|
||||||
|
Dat betekend dat wij geen manier meer hebben om u the authenticeren en u kunt daarna dus niet meer inloggen.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Logt u wel opnieuw in, dan worden uw gegevens opnieuw uit de centrale database van de RUG gehaald, en
|
||||||
|
krijgt u een nieuw en leeg account. In dat geval staan uw persoonsgegevens, namelijk e-mailadres, voornaam,
|
||||||
|
achternaam en student- of personeelsnummer weer in onze database.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Uw wachtwoord wordt door de centrale database van de RUG beheert, daar hebben wij geen toegang toe.
|
||||||
|
Wij gebruiken dezelfde authenticatie als bijvoorbeeld Nestor, progresswww en my university.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Gebruik deze link om al uw persoonsgegevens te verwijderen, u kunt niet meer inloggen.</p>
|
||||||
|
|
||||||
|
<a href="{{ url }}{% url 'gdpr-delete' user.email token %}">{{ url }}{% url 'gdpr-delete' user.email token %}</a>
|
||||||
|
|
||||||
|
<p>Met vriendelijke groet,</p>
|
||||||
|
<p>{% block gdpr_close %}Super Awesome Website{% endblock %}</p>
|
24
rugwebsite/templates/rugwebsite/email/gdpr_delete.txt
Normal file
24
rugwebsite/templates/rugwebsite/email/gdpr_delete.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Beste {{ user.first_name }} {{ user.last_name }},
|
||||||
|
|
||||||
|
|
||||||
|
Op uw verzoek sturen we u een link om uw persoonsgegevens van {% block gdpr_title %}Super Awesome Website{% endblock %}
|
||||||
|
te verwijderen. Wanneer u uw persoonsgegevens verwijdert, wordt ook uw personeels- of studentnummer verwijderd.
|
||||||
|
Dat betekend dat wij geen manier meer hebben om u the authenticeren en u kunt daarna dus niet meer inloggen.
|
||||||
|
|
||||||
|
|
||||||
|
Logt u wel opnieuw in, dan worden uw gegevens opnieuw uit de centrale database van de RUG gehaald, en
|
||||||
|
krijgt u een nieuw en leeg account. In dat geval staan uw persoonsgegevens, namelijk e-mailadres, voornaam,
|
||||||
|
achternaam en student- of personeelsnummer weer in onze database.
|
||||||
|
|
||||||
|
|
||||||
|
Uw wachtwoord wordt door de centrale database van de RUG beheert, daar hebben wij geen toegang toe.
|
||||||
|
Wij gebruiken dezelfde authenticatie als bijvoorbeeld Nestor, progresswww en my university.
|
||||||
|
|
||||||
|
|
||||||
|
Gebruik deze link om al uw persoonsgegevens te verwijderen, u kunt niet meer inloggen.
|
||||||
|
|
||||||
|
|
||||||
|
{{ url }}{% url 'gdpr-delete' user.email token %}
|
||||||
|
|
||||||
|
Met vriendelijke groet,
|
||||||
|
{% block gdpr_close %}Super Awesome Website{% endblock %}
|
190
rugwebsite/templates/rugwebsite/gdpr.html
Executable file
190
rugwebsite/templates/rugwebsite/gdpr.html
Executable file
@ -0,0 +1,190 @@
|
|||||||
|
{% extends "rugwebsite/base.html" %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
{% load bootstrap4 %}
|
||||||
|
|
||||||
|
{% block nav %}
|
||||||
|
<div class="rug-nav-item rug-nav-item-active">
|
||||||
|
<a href="{% url 'gdpr' %}">GDPR</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<h1>GDPR</h1>
|
||||||
|
<p>Privacyverklaring</p>
|
||||||
|
<br/>
|
||||||
|
<a href="{% url 'gdpr-request-delete' %}">Verzoek tot verwijderen persoonsgegevens</a>
|
||||||
|
{% if show_agree_button %}
|
||||||
|
<br/>
|
||||||
|
<a href="#" data-toggle="modal" data-target="#gdpr-agree-modal">Toestemming geven</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
{% block gdpr_content %}
|
||||||
|
<h1>Privacyverklaring {% block gdpr_title %}Super Awesome Website{% endblock %}</h1>
|
||||||
|
|
||||||
|
<h2>Inleiding</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
De Rijksuniversiteit Groningen (RUG) wil zorgvuldig omgaan met uw persoonsgegevens. Op grond van de
|
||||||
|
privacywetgeving, die de RUG in acht neemt, is de RUG daar ook verantwoordelijk voor. In deze privacyverklaring
|
||||||
|
wordt u geïnformeerd over hoe de RUG gegevens van u verwerkt en over de rechten die u hebt. Deze privacyverklaring
|
||||||
|
is een aanvulling op de
|
||||||
|
<a href="https://www.rug.nl/language-centre/about-us/quality-assurance/bescherming-persoonsgegevens.pdf">
|
||||||
|
‘Regeling Bescherming Persoonsgegevens Studenten en Personeel’
|
||||||
|
</a>
|
||||||
|
van de RUG. Bij tegenstrijdigheid prevaleert deze privacyverklaring.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Contactgegevens verantwoordelijke</h2>
|
||||||
|
|
||||||
|
<p>U kunt met uw vragen en verzoeken bij de RUG terecht. U kunt terecht bij:</p>
|
||||||
|
|
||||||
|
<p>Rijksuniversiteit Groningen</p>
|
||||||
|
<p>Postadres: Postbus 72 9700 AB Groningen</p>
|
||||||
|
<p>E-mail: privacy@rug.nl</p>
|
||||||
|
<p>Contactpersoon {% block gdpr_c_title %}{% endblock %}: {% block gdpr_contact %}{% endblock %}</p>
|
||||||
|
<p>Functionaris voor de Gegevensbescherming: Arjen Deenen</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Doel en grondslag verwerking</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
De RUG verwerkt uw persoonsgegevens in het kader van educatie. Het bijhouden van uw
|
||||||
|
{% block gdpr_content_summary %}voornaam, achternaam, e-mailadres en personeels- of studentnummer{% endblock %},
|
||||||
|
dient daarbij verschillende doelen:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% block gdpr_goals %}
|
||||||
|
<ul>
|
||||||
|
<li>educatie, de beoordeling van opdrachten voor vakken waarvoor u de workbench nodig heeft,</li>
|
||||||
|
<li>authenticatie, zodat u kunt inloggen op de workbench, uw annotaties kunt zien of aanpassen wanneer
|
||||||
|
dat gepast is.</li>
|
||||||
|
</ul>
|
||||||
|
{% endblock gdpr_goals %}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Verder worden de annotaties die u met de workbench maakt opgeslagen en gekoppeld aan deze persoonsgegevens.
|
||||||
|
Als vergeten wilt worden, kunt uw persoonsgegevens <a href="{% url 'gdpr-request-delete' %}">hier</a> verwijderen. U ontvangt
|
||||||
|
een e-mail met een link waarop u moet klikken. Dan worden uw personeels- of studentnummer, ur voor- en achternaam
|
||||||
|
en uw e-mailadres verwijdert en kunt u geen gebruik meer maken van de dienst.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Samengevat wil de RUG met deze website gegevens verzamelen voor wetenschappelijk onderzoek. Het realiseren van
|
||||||
|
deze doelen is te rechtvaardigen op basis van de volgende grondslagen
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% block gdpr_grondslagen %}
|
||||||
|
<ul>
|
||||||
|
<li>ondubbelzinnige toestemming,</li>
|
||||||
|
<li>noodzakelijk voor uitvoering overeenkomst, of</li>
|
||||||
|
<li>noodzakelijk voor invulling publiekrechtelijke taak (bij bestuursorgaan).</li>
|
||||||
|
</ul>
|
||||||
|
{% endblock gdpr_grondslagen %}
|
||||||
|
|
||||||
|
<h2>Verwerkte persoonsgegevens</h2>
|
||||||
|
|
||||||
|
|
||||||
|
<p>De RUG verwerkt in het kader van educatie de volgende persoonsgegevens van u:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Voor- en achternaam, om u eenvoudig te kunnen identificeren in andere administraties,</li>
|
||||||
|
<li>e-mailadres, om contact met u op te kunnen nemen,</li>
|
||||||
|
<li>personeels- of student-nummer, om u eenduidig te kunnen koppelen aan bijvoorbeeld een cijferlijst en om het
|
||||||
|
mogelijk te maken u in te laten loggen.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Uw wachtwoord wordt op geen enkele manier door ons opgeslagen of verwerkt, voor authenticatie gebruiken
|
||||||
|
wij de algemene aucount registratie van de RUG, die wordt beheerd door de afdeling Identity and Access Management
|
||||||
|
(IAM) van de RUG.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Ontvangers van uw persoonsgegevens</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Binnen de organisatie van de RUG worden uw persoonsgegevens uitsluitend verwerkt door de personen voor wie dat
|
||||||
|
noodzakelijk is in het kader van het uitzetten en houden van educatie en onderzoek.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Voor het opzetten en uitvoeren van de Pictures-And-Text workbench schakelt de RUG geen externe partner (verwerker)
|
||||||
|
in. Alle geautomatiseerde verwerking vindt plaats binnen de RUG bij het Centrum voor Informatietechnologie.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Bewaartermijnen</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
De RUG bewaart uw persoonsgegevens totdat u een verwijderdverzoek indient. Dan worden uw voornaam,
|
||||||
|
achternaam, student- of personeelsnummer en e-mailadres verwijderd, maar niet de annotaties die u heeft
|
||||||
|
toegevoegd, omdat dit geen persoonsgegevens betreft.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
U kunt <a href="{% url 'gdpr-request-delete' %}">hier</a> een verwijderverzoek indienen. Dat gaat volledig
|
||||||
|
eletronisch, niemand wordt op de hoogte gesteld van het verzoek en uw verzoek hoeft niet handmatig
|
||||||
|
goedgekeurd te worden.
|
||||||
|
<p>
|
||||||
|
Houdt u er rekening mee dat de gegevens nodig zijn voor het behalen van cijfers, mocht u verwijdering eisen
|
||||||
|
voordat uw werk beoordeeld is, dan kunt u mogelijk uw vakken niet met succes afsluiten.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Uw rechten</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
U hebt op grond van de privacywetgeving diverse rechten. U kunt voor de uitoefening van uw rechten contact opnemen
|
||||||
|
met de RUG. Uw verzoeken worden binnen een maand na ontvangst beoordeeld en afgehandeld. Voor behandeling wordt
|
||||||
|
vastgesteld dat het verzoek is ingediend door een bevoegd persoon en dat het legitiem is. Daarom kan om uw
|
||||||
|
legitimatie worden gevraagd voordat het verzoek in behandeling wordt genomen.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
U hebt het recht te verzoeken om een overzicht van de over u verwerkte persoonsgegevens en de verwerkingen daarvan.
|
||||||
|
Als u vindt dat uw persoonsgegevens onjuist zijn of als u niet langer wilt dat uw gegevens worden verwerkt, kunt u
|
||||||
|
vragen om deze gegevens aan te passen of om verwerking van uw persoonsgegevens te stoppen en deze te verwijderen.
|
||||||
|
U hebt in bepaalde gevallen ook recht op een afschrift van uw persoonsgegevens in een bruikbaar formaat. Om uw
|
||||||
|
verzoek te beoordelen en af te handelen, worden vanzelfsprekend uw persoonsgegevens verwerkt.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Naast het feit dat u bij de RUG terecht kunt met uw vragen, verzoeken en klachten, hebt u het recht om een klacht
|
||||||
|
in te dienen bij de toezichthoudende autoriteit. Dit is in Nederland de Autoriteit Persoonsgegevens.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Veranderingen in deze privacyverklaring</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
De RUG kan deze privacyverklaring wijzigen. Aanleiding hiervoor kan zijn: (wijziging van)wet- en regelgeving,
|
||||||
|
wijziging in het overkoepelende privacybeleid van de RUG en voortschrijden van de techniek. Uiteraard wordt u
|
||||||
|
hiervan tijdig op de hoogte gesteld.
|
||||||
|
</p>
|
||||||
|
{% endblock gdpr_content %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if show_agree_button %}
|
||||||
|
<div class="modal fade" tabindex="-1" role="dialog" id="gdpr-agree-modal">
|
||||||
|
<div class="modal-dialog" role="gdpr-agree">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 class="modal-title">Gaat u akkoord?</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
Gaat u akoord met het opslaan van uw persoonsgegevens volgens de privacyverklaring?
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-danger" data-dismiss="modal">Nee</button>
|
||||||
|
<a href="{% url 'gdpr-agree' email token %}?agree" class="btn btn-success">Ja</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock content%}
|
24
rugwebsite/templates/rugwebsite/gdpr_agree_success.html
Executable file
24
rugwebsite/templates/rugwebsite/gdpr_agree_success.html
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
{% extends "rugwebsite/base.html" %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Hartelijk dank!</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{% if already_agreed %}
|
||||||
|
U was al eerder akoord gegaan.<br/>
|
||||||
|
<br/>
|
||||||
|
Eventueel kunt u <a href="{% url 'gdpr-request-delete' %}">hier</a> een verwijder verzoek indienen.
|
||||||
|
{% elif token_not_found %}
|
||||||
|
Er ging iets mis, neem contact op met de Data Protection Officer van de RUG. Excuses voor het ongemak.
|
||||||
|
<br/>
|
||||||
|
Eventueel kunt u <a href="{% url 'gdpr-request-delete' %}">hier</a> een verwijder verzoek indienen.
|
||||||
|
{% else %}
|
||||||
|
We zullen uw persoonsgegevens zorgvuldig bewaren. Mocht u in de toekomst van gedachte veranderen, dan kunt u ze
|
||||||
|
<a href="{% url 'gdpr-request-delete' %}">hier</a>
|
||||||
|
verwijderen.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
{% endblock content %}
|
14
rugwebsite/templates/rugwebsite/gdpr_delete.html
Executable file
14
rugwebsite/templates/rugwebsite/gdpr_delete.html
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
{% extends "rugwebsite/base.html" %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Uw persoonsgegevens zijn verwijderd</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Uw versoonsgegevens zijn verwijdert. Als u opnieuw inlogt, worden uw gegevens opnieuw opgehaald uit de centrale
|
||||||
|
RUG administratie en krijgt u een nieuw account.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% endblock content %}
|
38
rugwebsite/templates/rugwebsite/gdpr_request_delete.html
Executable file
38
rugwebsite/templates/rugwebsite/gdpr_request_delete.html
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
{% extends "rugwebsite/base.html" %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
{% load bootstrap4 %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<h1>GDPR</h1>
|
||||||
|
<p>Persoonsgegevens verwijderen</p>
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h1>Verzoek tot verwijderen persoonsgegevens</h1>
|
||||||
|
<p>
|
||||||
|
Vul uw e-mail adres in, wij sturen u een e-mail met een link waarmee uw persoonsgegevens verwijderd kunnen worden.
|
||||||
|
</p>
|
||||||
|
<form action="{% url 'gdpr-request-delete' %}" method="post" accept-charset="utf-8" >
|
||||||
|
{% csrf_token %}
|
||||||
|
{% bootstrap_form form %}
|
||||||
|
<button class="btn btn-default" type="submit">Verzoek indienen</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock content%}
|
||||||
|
|
||||||
|
{% block nav %}
|
||||||
|
<div class="rug-nav-item">
|
||||||
|
<a href="{% url 'gdpr' %}">GDPR</a>
|
||||||
|
</div>
|
||||||
|
<div class="rug-nav-item rug-nav-item-active">
|
||||||
|
<a href="{% url 'gdpr-request-delete' %}">Verwijderverzoek</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
26
rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html
Executable file
26
rugwebsite/templates/rugwebsite/gdpr_request_delete_successful.html
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
{% extends "rugwebsite/base.html" %}
|
||||||
|
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block nav %}
|
||||||
|
<div class="rug-nav-item">
|
||||||
|
<a href="{% url 'gdpr' %}">GDPR</a>
|
||||||
|
</div>
|
||||||
|
<div class="rug-nav-item rug-nav-item-active">
|
||||||
|
<a href="{% url 'gdpr-request-delete' %}">Verwijderverzoek</a>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Verzoek tot verwijderen persoonsgegevens</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{% if found %}
|
||||||
|
We hebben een e-mail verstuurd waarmee u uw persoonsgegevens kunt verwijderen.
|
||||||
|
{% else %}
|
||||||
|
We hebben geen account met dat adres, probeer het nogmaals. <br/>
|
||||||
|
<a href="{% url 'gdpr-request-delete' %}">Nogmaals proberen</a>.
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% endblock content %}
|
@ -1,9 +1,10 @@
|
|||||||
from django.conf.urls import include, url
|
from django.conf.urls import include, url
|
||||||
import django_saml2_pro_auth.urls as saml_urls
|
import django_saml2_pro_auth.urls as saml_urls
|
||||||
from rugwebsite.views import home
|
from rugwebsite.views import home, gdpr, request_gdpr_delete
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
url(r'gdpr/$', gdpr, name='gdpr'),
|
||||||
|
url(r'gdpr-forget-me/$', request_gdpr_delete, name='gdpr-forget-me'),
|
||||||
url(r'', include(saml_urls, namespace='saml')),
|
url(r'', include(saml_urls, namespace='saml')),
|
||||||
url(r'$', home),
|
url(r'$', home),
|
||||||
]
|
]
|
||||||
|
@ -1,8 +1,79 @@
|
|||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
from rugwebsite.forms import RequestGDPRDelete
|
||||||
|
from rugwebsite.models import PendingGDPRAgree, GDPRAgreed, PendingGDPRDelete
|
||||||
|
|
||||||
|
from django.utils.crypto import get_random_string
|
||||||
|
|
||||||
|
|
||||||
def home(request):
|
def home(request):
|
||||||
|
return render(request, 'rugwebsite/home.html', {'shownav': True})
|
||||||
|
|
||||||
|
|
||||||
return render(request, 'rugwebsite/home.html', {
|
def gdpr(request):
|
||||||
|
return render(request, 'rugwebsite/gdpr.html', {'show_agree_button': False, 'shownav': True})
|
||||||
|
|
||||||
})
|
|
||||||
|
@login_required
|
||||||
|
def gdpr_ask_agreement(request):
|
||||||
|
if not request.user.is_superuser:
|
||||||
|
raise PermissionError()
|
||||||
|
|
||||||
|
for user in User.objects.filter(username='herbert').all():
|
||||||
|
token = get_random_string(length=32)
|
||||||
|
pending = PendingGDPRAgree(user=user, token=token)
|
||||||
|
pending.save()
|
||||||
|
pending.email()
|
||||||
|
return render(request, 'rugwebsite/gdpr.html', {'show_agree_button': False, 'shownav': True})
|
||||||
|
|
||||||
|
|
||||||
|
def gdpr_request_delete(request):
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = RequestGDPRDelete(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
users = list(User.objects.filter(email=form.cleaned_data['email']).all())
|
||||||
|
for user in users:
|
||||||
|
token = get_random_string(length=32)
|
||||||
|
pending = PendingGDPRDelete(user=user, token=token)
|
||||||
|
pending.save()
|
||||||
|
pending.email()
|
||||||
|
return render(request, 'rugwebsite/gdpr_request_delete_successful.html', {'shownav': True, 'found': len(users) > 0})
|
||||||
|
else:
|
||||||
|
form = RequestGDPRDelete()
|
||||||
|
|
||||||
|
return render(request, 'rugwebsite/gdpr_request_delete.html', {'form': form, 'shownav': True})
|
||||||
|
|
||||||
|
|
||||||
|
def gdpr_delete(request, email, token):
|
||||||
|
pending = list(PendingGDPRDelete.objects.filter(user__email=email, token=token).all())
|
||||||
|
if len(pending) > 0:
|
||||||
|
for pending in pending:
|
||||||
|
pending.forget(request)
|
||||||
|
return render(request, 'rugwebsite/gdpr_delete.html', {'deleted': True, 'shownav': True})
|
||||||
|
return render(request, 'rugwebsite/gdpr_delete.html', {'deleted': False, 'shownav': True})
|
||||||
|
|
||||||
|
|
||||||
|
def gdpr_agree(request, email, token):
|
||||||
|
if 'agree' not in request.GET:
|
||||||
|
return render(request, 'rugwebsite/gdpr.html', {'show_agree_button': True, 'shownav': True, 'email': email,
|
||||||
|
'token': token})
|
||||||
|
|
||||||
|
result = {
|
||||||
|
'already_agreed': GDPRAgreed.objects.filter(user__email=email).exists(),
|
||||||
|
'show_agree_buttom': False,
|
||||||
|
'shownav': True
|
||||||
|
}
|
||||||
|
|
||||||
|
if not result['already_agreed']:
|
||||||
|
pending = list(PendingGDPRAgree.objects.filter(token=token, user__email=email).all())
|
||||||
|
if len(pending) == 1:
|
||||||
|
pending[0].agree()
|
||||||
|
else:
|
||||||
|
if GDPRAgreed.objects.filter(user__email=email).exists():
|
||||||
|
result['already_agreed'] = True
|
||||||
|
else:
|
||||||
|
result['token_not_found'] = True
|
||||||
|
|
||||||
|
return render(request, 'rugwebsite/gdpr_agree_success.html', result, {'shownav': True})
|
||||||
|
Loading…
Reference in New Issue
Block a user