Skip to content

Commit 60aa2f0

Browse files
authored
Merge pull request #3931 from allegro/action-deactivate-users
Add action to decativate users
2 parents eac7e39 + c5cb4a7 commit 60aa2f0

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

mise.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ alias = ["deps", "i"]
3535
[tasks.up]
3636
run = """
3737
{% if not vars.skip_containers %}
38-
podman compose -f docker/docker-compose-dev.yml -p ralph up -d
38+
podman compose -f docker/docker-compose-dev.yml -p ralph up --no-recreate -d
3939
{% else %}
4040
echo "Skipping containers because of skip_containers var"
4141
{% endif %}

src/ralph/accounts/admin.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
from urllib.parse import quote_plus, urlencode
44

55
from django.conf import settings
6+
from django.contrib.admin.models import CHANGE, LogEntry
67
from django.contrib.admin.utils import unquote
78
from django.contrib.auth.admin import GroupAdmin, UserAdmin
89
from django.contrib.auth.models import Group
10+
from django.contrib.contenttypes.models import ContentType
911
from django.core.exceptions import PermissionDenied
1012
from django.db.models import Q
1113
from django.forms.models import model_to_dict
@@ -339,6 +341,47 @@ def user_change_password(self, request, id, form_url=""):
339341
with reversion.create_revision():
340342
return super().user_change_password(request, id, form_url)
341343

344+
def deactivate_users(self, request, queryset):
345+
for user in queryset:
346+
if not self.has_change_permission(request, obj=user):
347+
self.message_user(
348+
request,
349+
_("You don't have permission to deactivate user {}.").format(
350+
user.username
351+
),
352+
level="error",
353+
)
354+
continue
355+
user.is_active = False
356+
user.save()
357+
358+
LogEntry.objects.log_action(
359+
user_id=request.user.pk,
360+
content_type_id=ContentType.objects.get_for_model(user).pk,
361+
object_id=user.pk,
362+
object_repr=str(user),
363+
action_flag=CHANGE,
364+
change_message="Deactivated user via admin action.",
365+
)
366+
367+
self.message_user(
368+
request,
369+
_("User {} has been deactivated.").format(user.username),
370+
level="info",
371+
)
372+
373+
deactivate_users.short_description = _("Deactivate users")
374+
375+
actions = [deactivate_users]
376+
377+
def get_actions(self, request):
378+
actions = super().get_actions(request)
379+
380+
if not request.user.is_superuser:
381+
actions.pop(self.deactivate_users.__name__, None)
382+
383+
return actions
384+
342385

343386
@register(Group)
344387
class RalphGroupAdmin(EditPermissionsFormMixin, GroupAdmin, RalphAdmin):

0 commit comments

Comments
 (0)