ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: блокировка и удаление участников воркспейса в God Mode
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
|
||||
from plane.db.models import ProjectMember, WorkspaceMember
|
||||
|
||||
|
||||
def is_workspace_member_currently_banned(workspace_member):
|
||||
return bool(
|
||||
workspace_member
|
||||
and workspace_member.is_banned
|
||||
and (workspace_member.banned_until is None or workspace_member.banned_until > timezone.now())
|
||||
)
|
||||
|
||||
|
||||
def release_workspace_member_ban(workspace_member):
|
||||
project_member_ids = workspace_member.ban_project_member_ids or []
|
||||
|
||||
with transaction.atomic():
|
||||
if project_member_ids:
|
||||
ProjectMember.objects.filter(
|
||||
id__in=project_member_ids,
|
||||
workspace_id=workspace_member.workspace_id,
|
||||
member_id=workspace_member.member_id,
|
||||
).update(is_active=True, updated_at=timezone.now())
|
||||
|
||||
workspace_member.is_active = True
|
||||
workspace_member.is_banned = False
|
||||
workspace_member.banned_at = None
|
||||
workspace_member.banned_until = None
|
||||
workspace_member.ban_project_member_ids = []
|
||||
workspace_member.save(
|
||||
update_fields=[
|
||||
"is_active",
|
||||
"is_banned",
|
||||
"banned_at",
|
||||
"banned_until",
|
||||
"ban_project_member_ids",
|
||||
"updated_at",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def release_expired_workspace_bans(member=None, workspace_slug=None, workspace_id=None):
|
||||
queryset = WorkspaceMember.objects.filter(
|
||||
is_banned=True,
|
||||
banned_until__isnull=False,
|
||||
banned_until__lte=timezone.now(),
|
||||
)
|
||||
if member is not None:
|
||||
queryset = queryset.filter(member=member)
|
||||
if workspace_slug is not None:
|
||||
queryset = queryset.filter(workspace__slug=workspace_slug)
|
||||
if workspace_id is not None:
|
||||
queryset = queryset.filter(workspace_id=workspace_id)
|
||||
|
||||
for workspace_member in queryset:
|
||||
release_workspace_member_ban(workspace_member)
|
||||
Reference in New Issue
Block a user