From 0b8933306e071f626af0ff2250bca962c1a03090 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 21 Oct 2024 19:41:49 +0200 Subject: 🗃️ permissions refactoring: add permission request model - link between main item and ishtar users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/models_common.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'ishtar_common/models_common.py') 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 = [ -- cgit v1.2.3