From 491f0b9c879ecddba936dc6cf631bf2fd5a18496 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 6 Dec 2023 08:49:42 -0800 Subject: [PATCH] Enhancement: shared icon --- src-ui/messages.xlf | 28 ++++++++++++------- .../document-card-large.component.html | 6 ++++ .../document-card-small.component.html | 6 ++++ .../src/app/data/object-with-permissions.ts | 2 ++ src/documents/serialisers.py | 23 +++++++++++++++ 5 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 2d8d57be5..28b230d89 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1721,7 +1721,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html - 83 + 89 src/app/components/manage/consumption-templates/consumption-templates.component.html @@ -4073,7 +4073,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html - 99 + 105 @@ -5007,11 +5007,26 @@ 58,59 + + Shared + + src/app/components/document-list/document-card-large/document-card-large.component.html + 119 + + + src/app/components/document-list/document-card-small/document-card-small.component.html + 84 + + + src/app/pipes/username.pipe.ts + 33 + + Score: src/app/components/document-list/document-card-large/document-card-large.component.html - 116 + 122 @@ -6297,13 +6312,6 @@ 11 - - Shared - - src/app/pipes/username.pipe.ts - 33 - - Yes diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index b59c934f2..c0f668f49 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -112,6 +112,12 @@ {{document.owner | username}} +
+ + Shared +
Score: diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index c945384d6..8ba709ebb 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -77,6 +77,12 @@ {{document.owner | username}}
+
+ + Shared +
diff --git a/src-ui/src/app/data/object-with-permissions.ts b/src-ui/src/app/data/object-with-permissions.ts index 29db6bf26..55f2a2cef 100644 --- a/src-ui/src/app/data/object-with-permissions.ts +++ b/src-ui/src/app/data/object-with-permissions.ts @@ -17,4 +17,6 @@ export interface ObjectWithPermissions extends ObjectWithId { permissions?: PermissionsObject user_can_change?: boolean + + is_shared?: boolean } diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index c13801c06..4b6abfeca 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -8,6 +8,7 @@ from celery import states from django.conf import settings from django.contrib.auth.models import Group from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType from django.core.validators import URLValidator from django.utils.crypto import get_random_string from django.utils.text import slugify @@ -15,6 +16,8 @@ from django.utils.translation import gettext as _ from drf_writable_nested.serializers import NestedUpdateMixin from guardian.core import ObjectPermissionChecker from guardian.shortcuts import get_users_with_perms +from guardian.utils import get_group_obj_perms_model +from guardian.utils import get_user_obj_perms_model from rest_framework import fields from rest_framework import serializers from rest_framework.fields import SerializerMethodField @@ -160,6 +163,7 @@ class OwnedObjectSerializer(serializers.ModelSerializer, SetPermissionsMixin): try: if full_perms: self.fields.pop("user_can_change") + self.fields.pop("is_shared") else: self.fields.pop("permissions") except KeyError: @@ -205,8 +209,26 @@ class OwnedObjectSerializer(serializers.ModelSerializer, SetPermissionsMixin): ) ) + def get_is_shared(self, obj: Document): + ctype = ContentType.objects.get_for_model(obj) + UserObjectPermission = get_user_obj_perms_model() + GroupObjectPermission = get_group_obj_perms_model() + return obj.owner == self.user and ( + UserObjectPermission.objects.filter( + content_type=ctype, + object_pk=obj.pk, + ).count() + > 0 + or GroupObjectPermission.objects.filter( + content_type=ctype, + object_pk=obj.pk, + ).count() + > 0 + ) + permissions = SerializerMethodField(read_only=True) user_can_change = SerializerMethodField(read_only=True) + is_shared = SerializerMethodField(read_only=True) set_permissions = serializers.DictField( label="Set permissions", @@ -556,6 +578,7 @@ class DocumentSerializer( "owner", "permissions", "user_can_change", + "is_shared", "set_permissions", "notes", "custom_fields",