diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-10-21 19:41:49 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-19 14:43:48 +0100 |
commit | 0b8933306e071f626af0ff2250bca962c1a03090 (patch) | |
tree | 9022a85264942c5bf5fb6db8ffaab01844feced6 | |
parent | c93dd3812c53d21ab8517dc7af72e1d4b70a1b04 (diff) | |
download | Ishtar-0b8933306e071f626af0ff2250bca962c1a03090.tar.bz2 Ishtar-0b8933306e071f626af0ff2250bca962c1a03090.zip |
🗃️ permissions refactoring: add permission request model - link between main item and ishtar users
-rw-r--r-- | archaeological_context_records/migrations/0122_cr_ishtar_users.py | 110 | ||||
-rw-r--r-- | archaeological_files/migrations/0119_file_ishtar_users.py | 19 | ||||
-rw-r--r-- | archaeological_finds/migrations/0131_ishtar_users.py | 60 | ||||
-rw-r--r-- | archaeological_operations/migrations/0121_ishtar_users.py | 146 | ||||
-rw-r--r-- | archaeological_warehouse/migrations/0123_warehouse_container_ishtar_users.py | 24 | ||||
-rw-r--r-- | ishtar_common/migrations/0254_permissionrequests.py | 158 | ||||
-rw-r--r-- | ishtar_common/models.py | 58 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 39 |
8 files changed, 587 insertions, 27 deletions
diff --git a/archaeological_context_records/migrations/0122_cr_ishtar_users.py b/archaeological_context_records/migrations/0122_cr_ishtar_users.py new file mode 100644 index 000000000..8e16cfb45 --- /dev/null +++ b/archaeological_context_records/migrations/0122_cr_ishtar_users.py @@ -0,0 +1,110 @@ +# Generated by Django 2.2.24 on 2024-10-21 19:18 + +from django.db import migrations, models +import ishtar_common.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0254_permissionrequests'), + ('archaeological_context_records', '0121_add_hierarchy_documentations_excavation_technics'), + ] + + operations = [ + migrations.AddField( + model_name='contextrecord', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='contextrecord_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_bitmap_image', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated relation image (PNG)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_bitmap_image_above', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated above relation image (PNG)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_bitmap_image_below', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated below relation image (PNG)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_dot', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated relation image (DOT)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_dot_above', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated above relation image (DOT)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_dot_below', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated below relation image (DOT)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_image', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated relation image (SVG)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_image_above', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated above relation image (SVG)'), + ), + migrations.AlterField( + model_name='contextrecord', + name='relation_image_below', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated below relation image (SVG)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_bitmap_image', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated relation image (PNG)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_bitmap_image_above', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated above relation image (PNG)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_bitmap_image_below', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated below relation image (PNG)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_dot', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated relation image (DOT)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_dot_above', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated above relation image (DOT)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_dot_below', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated below relation image (DOT)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_image', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated relation image (SVG)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_image_above', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated above relation image (SVG)'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='relation_image_below', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated below relation image (SVG)'), + ), + ] diff --git a/archaeological_files/migrations/0119_file_ishtar_users.py b/archaeological_files/migrations/0119_file_ishtar_users.py new file mode 100644 index 000000000..eb33f34b9 --- /dev/null +++ b/archaeological_files/migrations/0119_file_ishtar_users.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.24 on 2024-10-21 19:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0254_permissionrequests'), + ('archaeological_files', '0118_operation_name'), + ] + + operations = [ + migrations.AddField( + model_name='file', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='file_permission_associated', to='ishtar_common.IshtarUser'), + ), + ] diff --git a/archaeological_finds/migrations/0131_ishtar_users.py b/archaeological_finds/migrations/0131_ishtar_users.py new file mode 100644 index 000000000..8d8772343 --- /dev/null +++ b/archaeological_finds/migrations/0131_ishtar_users.py @@ -0,0 +1,60 @@ +# Generated by Django 2.2.24 on 2024-10-21 19:18 + +from django.db import migrations, models +import ishtar_common.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0254_permissionrequests'), + ('archaeological_finds', '0130_data_discovery_method'), + ] + + operations = [ + migrations.AddField( + model_name='basefind', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='basefind_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='find', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='find_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='property', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='property_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='treatment', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='treatment_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='treatmentfile', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='treatmentfile_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AlterField( + model_name='historicaltreatment', + name='image', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True), + ), + migrations.AlterField( + model_name='historicaltreatment', + name='thumbnail', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True), + ), + migrations.AlterField( + model_name='treatment', + name='image', + field=models.ImageField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to=ishtar_common.utils.get_image_path), + ), + migrations.AlterField( + model_name='treatment', + name='thumbnail', + field=models.ImageField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to=ishtar_common.utils.get_image_path), + ), + ] diff --git a/archaeological_operations/migrations/0121_ishtar_users.py b/archaeological_operations/migrations/0121_ishtar_users.py new file mode 100644 index 000000000..b906003c1 --- /dev/null +++ b/archaeological_operations/migrations/0121_ishtar_users.py @@ -0,0 +1,146 @@ +# Generated by Django 2.2.24 on 2024-10-21 19:18 + +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0254_permissionrequests'), + ('archaeological_operations', '0120_data_site_status_nature_interpretation'), + ] + + operations = [ + migrations.AddField( + model_name='administrativeact', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='administrativeact_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='archaeologicalsite_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='operation', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='operation_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='parcel', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='parcel_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='parcelowner', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='parcelowner_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AlterField( + model_name='archaeologicalsite', + name='discoverer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='site_discovered', to='ishtar_common.Person', verbose_name='Discoverer'), + ), + migrations.AlterField( + model_name='archaeologicalsite', + name='precise_locality', + field=models.TextField(blank=True, default='', verbose_name='Address'), + ), + migrations.AlterField( + model_name='historicalarchaeologicalsite', + name='precise_locality', + field=models.TextField(blank=True, default='', verbose_name='Address'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_bitmap_image', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated relation image (PNG)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_bitmap_image_above', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated above relation image (PNG)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_bitmap_image_below', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated below relation image (PNG)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_dot', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated relation image (DOT)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_dot_above', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated above relation image (DOT)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_dot_below', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated below relation image (DOT)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_image', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated relation image (SVG)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_image_above', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated above relation image (SVG)'), + ), + migrations.AlterField( + model_name='historicaloperation', + name='relation_image_below', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=100, null=True, verbose_name='Generated below relation image (SVG)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_bitmap_image', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated relation image (PNG)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_bitmap_image_above', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated above relation image (PNG)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_bitmap_image_below', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated below relation image (PNG)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_dot', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated relation image (DOT)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_dot_above', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated above relation image (DOT)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_dot_below', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated below relation image (DOT)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_image', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated relation image (SVG)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_image_above', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated above relation image (SVG)'), + ), + migrations.AlterField( + model_name='operation', + name='relation_image_below', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Generated below relation image (SVG)'), + ), + ] diff --git a/archaeological_warehouse/migrations/0123_warehouse_container_ishtar_users.py b/archaeological_warehouse/migrations/0123_warehouse_container_ishtar_users.py new file mode 100644 index 000000000..2a15e477e --- /dev/null +++ b/archaeological_warehouse/migrations/0123_warehouse_container_ishtar_users.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.24 on 2024-10-21 19:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0254_permissionrequests'), + ('archaeological_warehouse', '0122_verbose_names'), + ] + + operations = [ + migrations.AddField( + model_name='container', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='container_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='warehouse', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='warehouse_permission_associated', to='ishtar_common.IshtarUser'), + ), + ] diff --git a/ishtar_common/migrations/0254_permissionrequests.py b/ishtar_common/migrations/0254_permissionrequests.py new file mode 100644 index 000000000..26b902512 --- /dev/null +++ b/ishtar_common/migrations/0254_permissionrequests.py @@ -0,0 +1,158 @@ +# Generated by Django 2.2.24 on 2024-10-21 19:18 + +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('ishtar_common', '0253_display_news'), + ] + + operations = [ + migrations.AddField( + model_name='biographicalnote', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='biographicalnote_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='document', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='document_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='organization', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='organization_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AddField( + model_name='person', + name='ishtar_users', + field=models.ManyToManyField(blank=True, related_name='person_permission_associated', to='ishtar_common.IshtarUser'), + ), + migrations.AlterField( + model_name='document', + name='associated_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to=ishtar_common.utils.get_image_path, verbose_name='Associated file'), + ), + migrations.AlterField( + model_name='document', + name='image', + field=models.ImageField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to=ishtar_common.utils.get_image_path), + ), + migrations.AlterField( + model_name='document', + name='thumbnail', + field=models.ImageField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to=ishtar_common.utils.get_image_path), + ), + migrations.AlterField( + model_name='documenttemplate', + name='export_format', + field=models.CharField(blank=True, choices=[('docx', 'DOCX'), ('html', 'HTML'), ('pdf', 'PDF'), ('xlsx', 'XLSX')], default='', max_length=4, verbose_name='Export format'), + ), + migrations.AlterField( + model_name='documenttemplate', + name='label_template', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to='templates/%Y/', verbose_name='Base template for labels'), + ), + migrations.AlterField( + model_name='documenttemplate', + name='template', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, null=True, upload_to='templates/%Y/', verbose_name='Template'), + ), + migrations.AlterField( + model_name='historicaldocument', + name='associated_file', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, verbose_name='Associated file'), + ), + migrations.AlterField( + model_name='historicaldocument', + name='image', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True), + ), + migrations.AlterField( + model_name='historicaldocument', + name='thumbnail', + field=models.TextField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True), + ), + migrations.AlterField( + model_name='import', + name='archive_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Archive file'), + ), + migrations.AlterField( + model_name='import', + name='error_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Error file'), + ), + migrations.AlterField( + model_name='import', + name='imported_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=220, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Imported file'), + ), + migrations.AlterField( + model_name='import', + name='imported_images', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=220, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Associated documents (zip file)'), + ), + migrations.AlterField( + model_name='import', + name='imported_values', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=220, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Imported values'), + ), + migrations.AlterField( + model_name='import', + name='match_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Match file'), + ), + migrations.AlterField( + model_name='import', + name='result_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Result file'), + ), + migrations.AlterField( + model_name='importgroup', + name='archive_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=255, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Archive file'), + ), + migrations.AlterField( + model_name='importgroup', + name='imported_file', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=220, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Imported file'), + ), + migrations.AlterField( + model_name='importgroup', + name='imported_images', + field=models.FileField(blank=True, help_text=ishtar_common.utils.max_size_help, max_length=220, null=True, upload_to='upload/imports/%Y/%m/', verbose_name='Associated documents (zip file)'), + ), + migrations.CreateModel( + name='PermissionRequest', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('slug', models.SlugField(unique=True, verbose_name='Slug')), + ('request', models.TextField(blank=True, default='', help_text="Use 'text' request used in Ishtar search input", verbose_name='Request')), + ('include_associated_items', models.BooleanField(default=True, help_text='All items associated items match the request', verbose_name='Include associated items')), + ('include_upstream_items', models.BooleanField(default=True, help_text='All items associated by upstream link math the request. For instance, match is done for all finds associated with own context records', verbose_name='Include upstream items')), + ('active', models.BooleanField(default=True, verbose_name='Active')), + ('model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='permissions', to='contenttypes.ContentType', verbose_name='Model')), + ], + options={ + 'verbose_name': 'Permission request', + 'verbose_name_plural': 'Permissions requests', + }, + ), + migrations.AddField( + model_name='profiletype', + name='permission_requests', + field=models.ManyToManyField(blank=True, related_name='profile_types', to='ishtar_common.PermissionRequest', verbose_name='Permission request'), + ), + migrations.AddField( + model_name='permissionrequest', + name='limit_to_attached_areas', + field=models.BooleanField(default=False, help_text='Request is limited to areas attached to the ishtar user', verbose_name='Limit request to attached areas'), + ) + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b1f226088..148843fd4 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -143,45 +143,45 @@ from ishtar_common.utils import ( ) from ishtar_common.models_common import ( - GeneralType, - HierarchicalType, - OrderedHierarchicalType, - OrderedType, + Address, BaseHistorizedItem, - LightHistorizedItem, - HistoricalRecords, - FullSearch, - SearchAltName, - OwnPerms, Cached, - Imported, - Address, - post_save_cache, - TemplateItem, - SpatialReferenceSystem, + CachedGen, + CompleteIdentifierItem, DashboardFormItem, - document_attached_changed, - SearchAltName, + Department, + DocumentItem, DynamicRequest, - GeoItem, + document_attached_changed, + FullSearch, + GeneralType, + GeoBufferType, GeoDataType, + GeoItem, GeoOriginType, GeoProviderType, GeoVectorData, - GeoBufferType, - CompleteIdentifierItem, - SearchVectorConfig, - DocumentItem, - QuickAction, + HierarchicalType, + HistoricalRecords, + ImageContainerModel, + Imported, + LightHistorizedItem, MainItem, Merge, + OrderedHierarchicalType, + OrderedType, + OwnPerms, + PermissionRequest, + post_save_cache, + QuickAction, + SearchAltName, + SearchVectorConfig, + SpatialReferenceSystem, + TemplateItem, ShortMenuItem, - Town, - ImageContainerModel, - StatisticItem, - CachedGen, - Department, State, + StatisticItem, + Town, ) __all__ = [ @@ -3436,6 +3436,10 @@ class GDPRLog(models.Model): class ProfileType(GeneralType): groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True) + permission_requests = models.ManyToManyField( + PermissionRequest, verbose_name=_("Permission request"), blank=True, + related_name="profile_types" + ) class Meta: verbose_name = _("Profile type") diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 4a266af9c..cd6c266ef 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -730,6 +730,7 @@ class GeneralType(Cached, models.Model): class OrderedModel(models.Model): order = models.IntegerField(_("Order"), default=10) + class Meta: abstract = True @@ -1553,6 +1554,7 @@ class BaseHistorizedItem( Historized item with external ID management. All historized items are searchable and have a data json field. Historized items can be "locked" for edition. + Historized items can have associated ishtar user for permission management """ IS_BASKET = False @@ -1591,6 +1593,12 @@ class BaseHistorizedItem( blank=True, null=True, ) + ishtar_users = models.ManyToManyField( + "ishtar_common.IshtarUser", blank=True, related_name='%(class)s_permission_associated' + ) + + class Meta: + abstract = True DATED_FIELDS = [ "created", @@ -3059,6 +3067,37 @@ class GeographicItem(models.Model): return lst +class PermissionRequest(models.Model): + name = models.CharField(_("Name"), max_length=200) + slug = models.SlugField(_("Slug"), unique=True) + model = models.ForeignKey(ContentType, related_name="permissions", + verbose_name=_("Model"), on_delete=models.CASCADE) + request = models.TextField( + _("Request"), blank=True, null=False, default="", + help_text=_("Use 'text' request used in Ishtar search input") + ) + limit_to_attached_areas = models.BooleanField( + _("Limit request to attached areas"), default=False, + help_text=_("Request is limited to areas attached to the ishtar user") + ) + include_associated_items = models.BooleanField( + _("Include associated items"), default=True, + help_text=_("All items associated items match the request") + ) + include_upstream_items = models.BooleanField( + _("Include upstream items"), default=True, + help_text=_( + "All items associated by upstream link math the request. " + "For instance, match is done for all finds associated with own " + "context records") + ) + active = models.BooleanField(_("Active"), default=True) + + class Meta: + verbose_name = _("Permission request") + verbose_name_plural = _("Permissions requests") + + class SerializeItem: SERIALIZE_EXCLUDE = ["search_vector"] SERIALIZE_PROPERTIES = [ |