diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-11-16 15:50:38 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-02-05 10:51:52 +0100 | 
| commit | 27056118d045ef7813f09ef94b16da32084de3be (patch) | |
| tree | 10a79a07b909a711412be3b6b30db4818b0ec559 /ishtar_common | |
| parent | 4659e3aa7fa2591bdec86c8eb4c12597e25c9864 (diff) | |
| download | Ishtar-27056118d045ef7813f09ef94b16da32084de3be.tar.bz2 Ishtar-27056118d045ef7813f09ef94b16da32084de3be.zip  | |
🗃️ GDPR: add related models
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/migrations/0233_gdprlog_gdprperson.py | 45 | ||||
| -rw-r--r-- | ishtar_common/models.py | 47 | 
2 files changed, 92 insertions, 0 deletions
diff --git a/ishtar_common/migrations/0233_gdprlog_gdprperson.py b/ishtar_common/migrations/0233_gdprlog_gdprperson.py new file mode 100644 index 000000000..374134fce --- /dev/null +++ b/ishtar_common/migrations/0233_gdprlog_gdprperson.py @@ -0,0 +1,45 @@ +# Generated by Django 2.2.24 on 2023-11-16 15:48 + +import datetime +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('ishtar_common', '0232_default_mandatory_keys_import_permissions'), +    ] + +    operations = [ +        migrations.CreateModel( +            name='GDPRPerson', +            fields=[ +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), +                ('raw_name', models.CharField(default='-', max_length=300, verbose_name='Raw name')), +                ('person', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Person', verbose_name='Person')), +            ], +            options={ +                'verbose_name': 'GDPR - Person', +                'verbose_name_plural': 'GDPR - Persons', +            }, +        ), +        migrations.CreateModel( +            name='GDPRLog', +            fields=[ +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), +                ('date', models.DateTimeField(default=datetime.datetime.now, verbose_name='Date')), +                ('ip', models.GenericIPAddressField(verbose_name='IP')), +                ('activity', models.CharField(choices=[('DC', 'Directory consultation'), ('DE', 'Directory export'), ('PV', "Viewing a person's notice"), ('PE', "Exporting a person's notice"), ('PC', 'Person creation'), ('PM', 'Person modification'), ('PD', 'Person deletion')], max_length=2, verbose_name='Activity')), +                ('persons', models.ManyToManyField(blank=True, to='ishtar_common.GDPRPerson', verbose_name='Persons')), +                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='User')), +            ], +            options={ +                'verbose_name': 'GDPR - Log', +                'verbose_name_plural': 'GDPR - Logs', +                'ordering': ('date',), +            }, +        ), +    ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 696020c58..944cbcf5d 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3203,6 +3203,53 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem):  post_save.connect(cached_label_changed, sender=Person) +GDPR_ACTIVITY = ( +    ("DC", _("Directory consultation")), +    ("DE", _("Directory export")), +    ("PV", _("Viewing a person's notice")), +    ("PE", _("Exporting a person's notice")), +    ("PC", _("Person creation")), +    ("PM", _("Person modification")), +    ("PD", _("Person deletion")), +) + + +class GDPRPerson(models.Model): +    person = models.ForeignKey(Person, verbose_name=_("Person"), on_delete=models.SET_NULL, +                               blank=True, null=True) +    raw_name = models.CharField(_("Raw name"), max_length=300, default="-") + +    class Meta: +        verbose_name = _("GDPR - Person") +        verbose_name_plural = _("GDPR - Persons") + +    def __str__(self): +        return self.raw_name + + +class GDPRLog(models.Model): +    user = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.PROTECT) +    date = models.DateTimeField(verbose_name=_("Date"), default=datetime.datetime.now) +    ip = models.GenericIPAddressField(verbose_name=_("IP")) +    activity = models.CharField(_("Activity"), max_length=2, choices=GDPR_ACTIVITY) +    persons = models.ManyToManyField(GDPRPerson, verbose_name=_("Persons"), blank=True) + +    class Meta: +        verbose_name = _("GDPR - Log") +        verbose_name_plural = _("GDPR - Logs") +        ordering = ("date",) +    ADMIN_SECTION = _("GDPR") + +    @property +    def activity_lbl(self): +        gdpr_activity_dict = dict(GDPR_ACTIVITY) +        if self.activity not in gdpr_activity_dict: +            return str(_("Unknown activity :")) + self.activity +        return gdpr_activity_dict[self.activity] + +    def __str__(self): +        return f"{self.user.username} - {self.date} - {self.activity_lbl}" +  class ProfileType(GeneralType):      groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True)  | 
