Skip to content

Commit

Permalink
Merge pull request #1022 from TOMToolkit/fix/extended_target_model_pe…
Browse files Browse the repository at this point in the history
…rmissions

update permission references
  • Loading branch information
jchate6 authored Aug 21, 2024
2 parents 3f0e9be + 154ec04 commit 1da554c
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 7 deletions.
9 changes: 9 additions & 0 deletions docs/targets/target_fields.rst
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ Create a new file in your custom app called ``management/commands/convert_target
from django.core.management.base import BaseCommand
from guardian.models import GroupObjectPermission, UserObjectPermission
from tom_targets.base_models import BaseTarget
from tom_targets.models import Target
Expand All @@ -198,6 +200,13 @@ Create a new file in your custom app called ``management/commands/convert_target
target = Target(basetarget_ptr_id=base_target.pk) # Create a new target with the base_target PK
target.__dict__.update(base_target.__dict__) # add base_target fields to target dictionary
target.save()
# re-add permissions for existing users and groups
group_set = set(gop.group for gop in GroupObjectPermission.objects.filter(object_pk=target.pk))
user_set = set(uop.user for uop in UserObjectPermission.objects.filter(object_pk=target.pk))
for group in group_set:
target.give_user_access(group)
for user in user_set:
target.give_user_access(user)
self.stdout.write(f'{Target.objects.count()} Targets updated.')
return
Expand Down
3 changes: 2 additions & 1 deletion tom_dataproducts/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from tom_dataproducts.filters import DataProductFilter
from tom_dataproducts.models import DataProduct, ReducedDatum
from tom_dataproducts.serializers import DataProductSerializer, ReducedDatumSerializer
from tom_targets.models import Target


class DataProductViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, GenericViewSet, PermissionListMixin):
Expand Down Expand Up @@ -65,7 +66,7 @@ def get_queryset(self):
"""
if settings.TARGET_PERMISSIONS_ONLY:
return super().get_queryset().filter(
target__in=get_objects_for_user(self.request.user, 'tom_targets.view_target')
target__in=get_objects_for_user(self.request.user, f'{Target._meta.app_label}.view_target')
)
else:
return get_objects_for_user(self.request.user, 'tom_dataproducts.view_dataproduct')
Expand Down
2 changes: 1 addition & 1 deletion tom_dataproducts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ def get_queryset(self):
"""
if settings.TARGET_PERMISSIONS_ONLY:
return super().get_queryset().filter(
target__in=get_objects_for_user(self.request.user, 'tom_targets.view_target')
target__in=get_objects_for_user(self.request.user, f'{Target._meta.app_label}.view_target')
)
else:
return get_objects_for_user(self.request.user, 'tom_dataproducts.view_dataproduct')
Expand Down
2 changes: 1 addition & 1 deletion tom_observations/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def get_queryset(self):
# Though it's next to impossible for a user to observe a target they don't have permission to view, this
# queryset ensures that such an edge case is covered.
return super().get_queryset().filter(
Q(target__in=get_objects_for_user(self.request.user, 'tom_targets.view_target')) |
Q(target__in=get_objects_for_user(self.request.user, f'{Target._meta.app_label}.view_target')) |
Q(user=self.request.user.id)
)
else:
Expand Down
4 changes: 2 additions & 2 deletions tom_observations/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def get_queryset(self, *args, **kwargs):
"""
if settings.TARGET_PERMISSIONS_ONLY:
return ObservationRecord.objects.filter(
target__in=get_objects_for_user(self.request.user, 'tom_targets.view_target')
target__in=get_objects_for_user(self.request.user, f'{Target._meta.app_label}.view_target')
)
else:
return get_objects_for_user(self.request.user, 'tom_observations.view_observationrecord')
Expand Down Expand Up @@ -493,7 +493,7 @@ def get_queryset(self, *args, **kwargs):
"""
if settings.TARGET_PERMISSIONS_ONLY:
return ObservationRecord.objects.filter(
target__in=get_objects_for_user(self.request.user, 'tom_targets.view_target')
target__in=get_objects_for_user(self.request.user, f'{Target._meta.app_label}.view_target')
)
else:
return get_objects_for_user(self.request.user, 'tom_observations.view_observationrecord')
Expand Down
5 changes: 3 additions & 2 deletions tom_targets/templatetags/targets_extras.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def recent_targets(context, limit=10):
Displays a list of the most recently created targets in the TOM up to the given limit, or 10 if not specified.
"""
user = context['request'].user
return {'targets': get_objects_for_user(user, 'tom_targets.view_target').order_by('-created')[:limit]}
return {'targets': get_objects_for_user(user, f'{Target._meta.app_label}.view_target').order_by('-created')[:limit]}


@register.inclusion_tag('tom_targets/partials/recently_updated_targets.html', takes_context=True)
Expand All @@ -39,7 +39,8 @@ def recently_updated_targets(context, limit=10):
Displays a list of the most recently updated targets in the TOM up to the given limit, or 10 if not specified.
"""
user = context['request'].user
return {'targets': get_objects_for_user(user, 'tom_targets.view_target').order_by('-modified')[:limit]}
return {'targets': get_objects_for_user(user,
f'{Target._meta.app_label}.view_target').order_by('-modified')[:limit]}


@register.inclusion_tag('tom_targets/partials/target_feature.html')
Expand Down

0 comments on commit 1da554c

Please sign in to comment.