diff options
-rw-r--r-- | archaeological_context_records/tests.py | 12 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 6 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 34 | ||||
-rw-r--r-- | ishtar_common/admin.py | 16 | ||||
-rw-r--r-- | ishtar_common/migrations/0258_rename_perm_query.py | 40 | ||||
-rw-r--r-- | ishtar_common/models.py | 30 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 14 |
7 files changed, 96 insertions, 56 deletions
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index d15c24a00..20c70c458 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -45,7 +45,7 @@ from ishtar_common.models import ( from ishtar_common import forms_common from archaeological_operations.tests import OperationInitTest, ImportTest, \ - TestPermissionRequest + TestPermissionQuery from archaeological_operations import models as models_ope from archaeological_operations.views import RELATION_FORMSET_EXTRA_FORM from archaeological_context_records import models @@ -1056,20 +1056,20 @@ class ContextRecordOldPermissionTest(ContextRecordInit, TestCase): self.assertRedirects(response, "/") -class ContextRecordPermissionTest(ContextRecordInit, TestPermissionRequest, +class ContextRecordPermissionTest(ContextRecordInit, TestPermissionQuery, TestCase): fixtures = CONTEXT_RECORD_TOWNS_FIXTURES def setUp(self): IshtarSiteProfile.objects.create() - self.setup_permission_requests( + self.setup_permission_queries( "ope", "operation", permissions=["view_own_operation", "change_own_operation"], create_profiles=False ) - self.setup_permission_requests( + self.setup_permission_queries( "cr", "contextrecord", permissions=["view_own_contextrecord", "change_own_contextrecord"], @@ -1205,8 +1205,8 @@ class ContextRecordPermissionTest(ContextRecordInit, TestPermissionRequest, # upstream with associated request for operation gp = Group.objects.get(name="ope_xxx") self.profile_types["cr_upstream"].groups.add(gp) - self.profile_types["cr_upstream"].permission_requests.add( - self.permission_requests["ope_associated_items"] + self.profile_types["cr_upstream"].permission_queries.add( + self.permission_queries["ope_associated_items"] ) upstream_user.ishtaruser.generate_permission() diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index e0532effc..bc9a5647b 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -95,7 +95,7 @@ from ishtar_common.tests import ( SearchText, ) from archaeological_operations.tests import ImportTest, create_operation, \ - create_administrativact, TestPermissionRequest + create_administrativact, TestPermissionQuery from archaeological_context_records.tests import ContextRecordInit from archaeological_operations.serializers import operation_serialization @@ -2022,12 +2022,12 @@ class FindOldPermissionTest(FindInit, TestCase): self.assertEqual(json.loads(content)["recordsTotal"], 1) -class FindPermissionTest(FindInit, TestPermissionRequest, TestCase): +class FindPermissionTest(FindInit, TestPermissionQuery, TestCase): fixtures = FIND_FIXTURES model = models.Find def setUp(self): - self.setup_permission_requests( + self.setup_permission_queries( "find", "find", permissions=["view_own_find", "change_own_find"], diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index e0c5df3ef..e46c79ee6 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -69,7 +69,7 @@ from ishtar_common.models import ( Town, ImporterColumn, ImportColumnValue, - PermissionRequest, + PermissionQuery, Person, DocumentTemplate, PersonType, @@ -3484,28 +3484,28 @@ class OperationSearchTest(TestCase, OperationInitTest, SearchText): self.assertEqual(values["data"], expected_result) -class TestPermissionRequest: - def setup_permission_requests(self, prefix, model_name, permissions, +class TestPermissionQuery: + def setup_permission_queries(self, prefix, model_name, permissions, perm_requests=None, create_profiles=True): content_type = ContentType.objects.get(model=model_name) - if not hasattr(self, "permission_requests"): - self.permission_requests = {} - self.permission_requests.update({ - f"{prefix}_associated_items": PermissionRequest.objects.create( + if not hasattr(self, "permission_queries"): + self.permission_queries = {} + self.permission_queries.update({ + f"{prefix}_associated_items": PermissionQuery.objects.create( model=content_type, request="", include_associated_items=True, include_upstream_items=False, slug=f'{prefix}-associated_items' ), - f"{prefix}_upstream": PermissionRequest.objects.create( + f"{prefix}_upstream": PermissionQuery.objects.create( model=content_type, request="", include_associated_items=False, include_upstream_items=True, slug=f"{prefix}-upstream" ), - f"{prefix}_areas": PermissionRequest.objects.create( + f"{prefix}_areas": PermissionQuery.objects.create( model=content_type, request="", include_associated_items=False, @@ -3516,15 +3516,15 @@ class TestPermissionRequest: }) if perm_requests: for idx, request in enumerate(perm_requests): - pr = PermissionRequest.objects.create( + pr = PermissionQuery.objects.create( model=content_type, request=request, include_associated_items=False, include_upstream_items=False, slug=f"{prefix}-req-{idx+1}" ) - self.permission_requests[f"{prefix}_request_{idx + 1}"] = pr - pr = PermissionRequest.objects.create( + self.permission_queries[f"{prefix}_request_{idx + 1}"] = pr + pr = PermissionQuery.objects.create( model=content_type, request=request, include_associated_items=False, @@ -3532,7 +3532,7 @@ class TestPermissionRequest: limit_to_attached_areas=True, slug=f"{prefix}-req-areas-{idx+1}" ) - self.permission_requests[f"{prefix}_request_areas_{idx + 1}"] = pr + self.permission_queries[f"{prefix}_request_areas_{idx + 1}"] = pr gp = Group.objects.create(name=f"{prefix}_xxx") for permission in permissions: for p in Permission.objects.filter(codename=permission).all(): @@ -3541,13 +3541,13 @@ class TestPermissionRequest: return if not hasattr(self, "profile_types"): self.profile_types = {} - for key in self.permission_requests.keys(): + for key in self.permission_queries.keys(): profile_type = ProfileType.objects.create( label=key, txt_idx=key, ) profile_type.groups.add(gp) - profile_type.permission_requests.add(self.permission_requests[key]) + profile_type.permission_queries.add(self.permission_queries[key]) self.profile_types[key] = profile_type def _test_search(self, url, label, user, expected): @@ -3734,13 +3734,13 @@ class OperationOldPermissionTest(TestCase, OperationInitTest): self.assertRedirects(response, "/") -class OperationPermissionTest(TestCase, TestPermissionRequest, OperationInitTest): +class OperationPermissionTest(TestCase, TestPermissionQuery, OperationInitTest): fixtures = FILE_FIXTURES def setUp(self): IshtarSiteProfile.objects.get_or_create(slug="default", active=True) - self.setup_permission_requests( + self.setup_permission_queries( "ope", "operation", permissions=["view_own_operation", "change_own_operation"], diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 7a621f601..2e85486cf 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -783,9 +783,9 @@ class PersonAdmin(HistorizedObjectAdmin): admin_site.register(models.Person, PersonAdmin) -class PermissionRequestAdminForm(forms.ModelForm): +class PermissionQueryAdminForm(forms.ModelForm): class Meta: - model = models_common.PermissionRequest + model = models_common.PermissionQuery exclude = [] def __init__(self, *args, **kwargs): @@ -825,15 +825,15 @@ class PermissionRequestAdminForm(forms.ModelForm): return self.cleaned_data -@admin.register(models_common.PermissionRequest, site=admin_site) -class PermissionRequestAdmin(admin.ModelAdmin): +@admin.register(models_common.PermissionQuery, site=admin_site) +class PermissionQueryAdmin(admin.ModelAdmin): prepopulated_fields = {"slug": ("name",)} search_fields = ("model__model__unaccent", "name") list_display = ( "model", "name", "active", "include_associated_items", "include_upstream_items", "limit_to_attached_areas" ) - form = PermissionRequestAdminForm + form = PermissionQueryAdminForm def get_content_types_with_sheet(with_empty=False): @@ -1825,7 +1825,7 @@ admin_site.register(models.Area, AreaAdmin) class ProfileTypeAdmin(GeneralTypeAdmin): model = models.ProfileType filter_vertical = ("groups",) - autocomplete_fields = ("permission_requests", "filtered_sheets") + autocomplete_fields = ("permission_queries", "filtered_sheets") def save_related(self, request, form, formsets, change): super().save_related(request, form, formsets, change) @@ -1851,8 +1851,8 @@ class ProfileTypeAdmin(GeneralTypeAdmin): permissions_needed.add(perm_type) else: permissions_not_needed.add(perm_type) - for permission_request in obj.permission_requests.all(): - model = permission_request.model.model + for permission_query in obj.permission_queries.all(): + model = permission_query.model.model for perm_type, perm_model in list(permissions_needed): if model == perm_model: permissions_needed.remove((perm_type, perm_model)) diff --git a/ishtar_common/migrations/0258_rename_perm_query.py b/ishtar_common/migrations/0258_rename_perm_query.py new file mode 100644 index 000000000..700ed0434 --- /dev/null +++ b/ishtar_common/migrations/0258_rename_perm_query.py @@ -0,0 +1,40 @@ +# Generated by Django 2.2.24 on 2024-11-14 12:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('ishtar_common', '0257_sheet_filters'), + ] + + operations = [ + migrations.RenameModel( + old_name='PermissionRequest', + new_name='PermissionQuery', + ), + migrations.AlterModelOptions( + name='filteredsheet', + options={'verbose_name': 'Filtered sheet - Sheet', 'verbose_name_plural': 'Filtered sheet - Sheets'}, + ), + migrations.AlterModelOptions( + name='permissionquery', + options={'verbose_name': 'Permission query', 'verbose_name_plural': 'Permissions queries'}, + ), + migrations.AlterModelOptions( + name='sheetfilter', + options={'verbose_name': 'Filtered sheet - Filter', 'verbose_name_plural': 'Filtered sheet - Filters'}, + ), + migrations.RenameField( + model_name='profiletype', + old_name='permission_requests', + new_name='permission_queries', + ), + migrations.AlterField( + model_name='profiletype', + name='permission_queries', + field=models.ManyToManyField(blank=True, related_name='profile_types', to='ishtar_common.PermissionQuery', verbose_name='Permissions queries'), + ), + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 9579cdbd1..8542c8963 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -175,7 +175,7 @@ from ishtar_common.models_common import ( OrderedHierarchicalType, OrderedType, OwnPerms, - PermissionRequest, + PermissionQuery, post_save_cache, QuickAction, SearchVectorConfig, @@ -201,7 +201,7 @@ __all__ = [ "ImporterDuplicateField", "Imported", "FilteredSheet", - "PermissionRequest", + "PermissionQuery", "Regexp", "ImportTarget", "ItemKey", @@ -3441,8 +3441,8 @@ class GDPRLog(models.Model): class ProfileType(GeneralType): groups = models.ManyToManyField(Group, verbose_name=_("Groups"), blank=True, related_name="profile_types") - permission_requests = models.ManyToManyField( - PermissionRequest, verbose_name=_("Permissions requests"), blank=True, + permission_queries = models.ManyToManyField( + PermissionQuery, verbose_name=_("Permissions queries"), blank=True, related_name="profile_types" ) filtered_sheets = models.ManyToManyField( @@ -3500,7 +3500,7 @@ post_save.connect(post_save_cache, sender=ProfileType) post_delete.connect(post_save_cache, sender=ProfileType) -def permission_requests_changed(sender, **kwargs): +def permission_queries_changed(sender, **kwargs): instance = kwargs.get("instance", None) if not instance: return @@ -3509,9 +3509,9 @@ def permission_requests_changed(sender, **kwargs): ).update(need_permission_update=True) -m2m_changed.connect(permission_requests_changed, - sender=ProfileType.permission_requests.through) -m2m_changed.connect(permission_requests_changed, +m2m_changed.connect(permission_queries_changed, + sender=ProfileType.permission_queries.through) +m2m_changed.connect(permission_queries_changed, sender=ProfileType.groups.through) @@ -3605,11 +3605,11 @@ class UserProfile(models.Model): new_item.external_sources.add(src) return new_item - def _generate_permission(self, ishtar_user, content_type, permission_request, + def _generate_permission(self, ishtar_user, content_type, permission_query, permissions, permission_type): item_ids = [] model_class = content_type.model_class() - if permission_request.include_associated_items: + if permission_query.include_associated_items: if hasattr(model_class, "ishtar_users"): item_ids += model_class.objects.filter( ishtar_users__pk=ishtar_user.pk @@ -3628,19 +3628,19 @@ class UserProfile(models.Model): ) # DEBUG # print("ishtar_common/models.py - 3578", item_ids, ishtar_user, content_type, permission_type) - if permission_request.include_upstream_items: + if permission_query.include_upstream_items: item_ids += model_class.get_ids_from_upper_permissions( ishtar_user.user_ptr.pk, permissions ) # DEBUG # print("ishtar_common/models.py - 3584", item_ids, ishtar_user, content_type, permission_type) - if permission_request.request or permission_request.limit_to_attached_areas: + if permission_query.request or permission_query.limit_to_attached_areas: _get_item = get_item( content_type.model_class(), "", "", no_permission_check=True, ) result = [] - query = permission_request.request + query = permission_query.request if query: if "{USER}" in query: query = query.replace("{USER}", f"id:{ishtar_user.person_id}") @@ -3648,7 +3648,7 @@ class UserProfile(models.Model): q = _get_item(None, return_query=True, ishtaruser=ishtar_user, query=query) result = list(q.values_list("pk", flat=True)) - if permission_request.limit_to_attached_areas: + if permission_query.limit_to_attached_areas: profile = ishtar_user.current_profile if not profile: # no areas attached return [] @@ -3699,7 +3699,7 @@ class UserProfile(models.Model): permissions += list(group.permissions.filter( codename__contains=permission_type ).all()) - q_req = self.profile_type.permission_requests.filter( + q_req = self.profile_type.permission_queries.filter( model=content_type, active=True ) item_ids = [] diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index cd74ca068..f42b6a08a 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -3108,7 +3108,7 @@ class GeographicItem(models.Model): return lst -class PermissionRequest(models.Model): +class PermissionQuery(models.Model): model = models.ForeignKey(ContentType, related_name="permissions", verbose_name=_("Model"), on_delete=models.CASCADE) name = models.CharField(_("Name"), max_length=200) @@ -3137,22 +3137,22 @@ class PermissionRequest(models.Model): ADMIN_SECTION = _("Account") class Meta: - verbose_name = _("Permission request") - verbose_name_plural = _("Permissions requests") + verbose_name = _("Permission query") + verbose_name_plural = _("Permissions queries") def __str__(self): return f"{self.model} - {self.name}" -def post_save_permission_request(sender, **kwargs): - permission_request = kwargs["instance"] +def post_save_permission_query(sender, **kwargs): + permission_query = kwargs["instance"] IshtarUser = apps.get_model("ishtar_common", "IshtarUser") IshtarUser.objects.filter( - person__profiles__profile_type__permission_requests__pk=permission_request.pk + person__profiles__profile_type__permission_queries__pk=permission_query.pk ).update(need_permission_update=True) -post_save.connect(post_save_permission_request, sender=PermissionRequest) +post_save.connect(post_save_permission_query, sender=PermissionQuery) class SerializeItem: |