fix: 修复组织批量删除的问题

pull/6229/head
Bai 2021-06-03 11:16:54 +08:00 committed by Jiangjie.Bai
parent a9bdbcf7c6
commit adae509bc0
1 changed files with 22 additions and 19 deletions

View File

@ -48,7 +48,6 @@ class OrgViewSet(BulkModelViewSet):
queryset = Organization.objects.all() queryset = Organization.objects.all()
serializer_class = OrgSerializer serializer_class = OrgSerializer
permission_classes = (IsSuperUserOrAppUser,) permission_classes = (IsSuperUserOrAppUser,)
org = None
def get_serializer_class(self): def get_serializer_class(self):
mapper = { mapper = {
@ -58,32 +57,36 @@ class OrgViewSet(BulkModelViewSet):
return mapper.get(self.action, super().get_serializer_class()) return mapper.get(self.action, super().get_serializer_class())
@tmp_to_root_org() @tmp_to_root_org()
def get_data_from_model(self, model): def get_data_from_model(self, org, model):
if model == User: if model == User:
data = model.objects.filter( data = model.objects.filter(
orgs__id=self.org.id, orgs__id=org.id, m2m_org_members__role__in=[ROLE.USER, ROLE.ADMIN, ROLE.AUDITOR]
m2m_org_members__role__in=[ROLE.USER, ROLE.ADMIN, ROLE.AUDITOR]
) )
elif model == Node: elif model == Node:
# 节点不能手动删除,所以排除检查 # 节点不能手动删除,所以排除检查
data = model.objects.filter(org_id=self.org.id).exclude(parent_key='', key__regex=r'^[0-9]+$') data = model.objects.filter(org_id=org.id).exclude(parent_key='', key__regex=r'^[0-9]+$')
else: else:
data = model.objects.filter(org_id=self.org.id) data = model.objects.filter(org_id=org.id)
return data return data
def destroy(self, request, *args, **kwargs): def allow_bulk_destroy(self, qs, filtered):
self.org = self.get_object() return False
def perform_destroy(self, instance):
if str(current_org) == str(instance):
msg = _('The current organization ({}) cannot be deleted'.format(current_org))
raise PermissionDenied(detail=msg)
for model in org_related_models: for model in org_related_models:
data = self.get_data_from_model(model) data = self.get_data_from_model(instance, model)
if data: if not data:
msg = _('Have {} exists, Please delete').format(model._meta.verbose_name) continue
return Response(data={'error': msg}, status=status.HTTP_403_FORBIDDEN) msg = _(
else: 'The organization have resource ({}) cannot be deleted'
if str(current_org) == str(self.org): ).format(model._meta.verbose_name)
msg = _('The current organization cannot be deleted') raise PermissionDenied(detail=msg)
return Response(data={'error': msg}, status=status.HTTP_403_FORBIDDEN)
self.org.delete() super().perform_destroy(instance)
return Response({'msg': True}, status=status.HTTP_200_OK)
class OrgMemberRelationBulkViewSet(JMSBulkRelationModelViewSet): class OrgMemberRelationBulkViewSet(JMSBulkRelationModelViewSet):