[Bug] Fixes for Group handling, Load all objects only if necessary (#113)

Fixes #109
Fixes #110
Fixes #111
Fixes #112

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#113
This commit is contained in:
2025-09-11 18:19:27 +12:00
parent af3981d96e
commit 7905a8c2c1
3 changed files with 32 additions and 28 deletions

View File

@ -265,7 +265,7 @@ class GroupManager(object):
@transaction.atomic @transaction.atomic
def update_members(caller: User, group: Group, member: Union[User, Group], add_or_remove: str): def update_members(caller: User, group: Group, member: Union[User, Group], add_or_remove: str):
if caller != group.owner: if caller != group.owner and not caller.is_superuser:
raise ValueError('Only the group Owner is allowed to add members!') raise ValueError('Only the group Owner is allowed to add members!')
if isinstance(member, Group): if isinstance(member, Group):

View File

@ -181,7 +181,7 @@ class Group(TimeStampedModel):
public = models.BooleanField(verbose_name='Public Group', default=False) public = models.BooleanField(verbose_name='Public Group', default=False)
description = models.TextField(blank=False, null=False, verbose_name='Descriptions', default='no description') description = models.TextField(blank=False, null=False, verbose_name='Descriptions', default='no description')
user_member = models.ManyToManyField("User", verbose_name='User members', related_name='users_in_group') user_member = models.ManyToManyField("User", verbose_name='User members', related_name='users_in_group')
group_member = models.ManyToManyField("Group", verbose_name='Group member', related_name='groups_in_group') group_member = models.ManyToManyField("Group", verbose_name='Group member', related_name='groups_in_group', blank=True)
def __str__(self): def __str__(self):
return f"{self.name} (pk={self.pk})" return f"{self.name} (pk={self.pk})"

View File

@ -258,18 +258,21 @@
height: auto; height: auto;
} }
</style> </style>
{% if object_type != 'package' %}
<div id="load-all-loading" class="spinner-widget"> <div id="load-all-loading" class="spinner-widget" style="display: none">
<img id="loading-gif" src="{% static '/images/wait.gif' %}" alt="Loading..."> <img id="loading-gif" src="{% static '/images/wait.gif' %}" alt="Loading...">
</div> </div>
{% endif %}
</div> </div>
<script> <script>
$(function () { $(function () {
$('#object-search').show(); $('#object-search').show();
{% if object_type != 'package' %} {% if object_type != 'package' and object_type != 'user' and object_type != 'group' %}
{% if reviewed_objects|length > 50 or unreviewed_objects|length > 50 %}
$('#load-all-loading').show()
setTimeout(function () { setTimeout(function () {
$('#load-all-error').hide(); $('#load-all-error').hide();
@ -295,6 +298,7 @@
}, 2500); }, 2500);
{% endif %} {% endif %}
{% endif %}
$('#modal-form-delete-submit').on('click', function (e) { $('#modal-form-delete-submit').on('click', function (e) {
e.preventDefault(); e.preventDefault();