diff --git a/admin/preprint_providers/forms.py b/admin/preprint_providers/forms.py index 1393aae41ef..cb7a0f1b1e9 100644 --- a/admin/preprint_providers/forms.py +++ b/admin/preprint_providers/forms.py @@ -116,10 +116,10 @@ def __init__(self, *args, provider_groups=None, **kwargs): super().__init__(*args, **kwargs) provider_groups = provider_groups or Group.objects.none() - self.fields['group_perms'] = forms.ModelMultipleChoiceField( + self.fields['group_perms'] = forms.ModelChoiceField( queryset=provider_groups, required=False, - widget=forms.CheckboxSelectMultiple + widget=forms.RadioSelect ) user_id = forms.CharField(required=True, max_length=5, min_length=5) diff --git a/admin/preprint_providers/views.py b/admin/preprint_providers/views.py index 4c7439f4554..d841981fe84 100644 --- a/admin/preprint_providers/views.py +++ b/admin/preprint_providers/views.py @@ -481,10 +481,14 @@ def form_valid(self, form): if not osf_user: raise Http404(f'OSF user with id "{user_id}" not found. Please double check.') - for group in form.cleaned_data.get('group_perms'): - self.target_provider.add_to_group(osf_user, group) + if osf_user.has_groups(self.target_provider.group_names): + messages.error(self.request, f'User with guid: {user_id} is already a moderator or admin') + return super().form_invalid(form) + group = form.cleaned_data.get('group_perms') + self.target_provider.add_to_group(osf_user, group) osf_user.save() + messages.success(self.request, f'Permissions update successful for OSF User {osf_user.username}!') return super().form_valid(form) diff --git a/admin/providers/views.py b/admin/providers/views.py index e42d25bb5c9..d21cd65a93b 100644 --- a/admin/providers/views.py +++ b/admin/providers/views.py @@ -29,8 +29,7 @@ def post(self, request, *args, **kwargs): messages.error(request, f'User for guid: {data["add-moderators-form"][0]} could not be found') return redirect(f'{self.url_namespace}:add_admin_or_moderator', provider_id=provider.id) - groups = [provider.format_group(name) for name in provider.groups.keys()] - if target_user.has_groups(groups): + if target_user.has_groups(provider.group_names): messages.error(request, f'User with guid: {data["add-moderators-form"][0]} is already a moderator or admin') return redirect(f'{self.url_namespace}:add_admin_or_moderator', provider_id=provider.id)