def create_group(self, group_info): ''' 创建组 ''' serializer = GroupDetailSerializer(data=group_info) serializer.is_valid(raise_exception=True) serializer.save() group = serializer.instance group.order_no = Group.get_max_order_no(parent=group.parent) + 1 group.save() # 批量创建组权限 # 1) 去重 perm_ids = Perm.valid_objects.values_list('pk', flat=True) exist_perm_ids = GroupPerm.valid_objects.filter( owner=serializer.instance).values_list('perm_id', flat=True) perm_ids = set(perm_ids).difference(exist_perm_ids) # 2) 批量创建 group_perms = [ GroupPerm(owner=serializer.instance, perm_id=x) for x in perm_ids ] GroupPerm.objects.bulk_create(group_perms) return serializer.instance
def move_group_to_group(self, group, parent_group): ''' 将一个已有组移至另一组下 ''' if group == parent_group or parent_group.if_belong_to_group( group, recursive=True): raise ValidationError({'node': ['deadlock']}) if parent_group.top != 'root' and group.top != parent_group.top: raise ValidationError({'node': ["across_scope"]}) group.order_no = Group.get_max_order_no(parent=parent_group) + 1 group.parent = parent_group group.save(update_fields=['order_no', 'parent'])
def add_group_to_group(self, group, parent_group): ''' 将一个新组加入另一个组作为后者子组 ''' if group == parent_group or parent_group.if_belong_to_group( group, recursive=True): raise ValidationError({'node': ['deadlock']}) group.parent = parent_group if parent_group.uid == 'intra': group.top = group.uid else: group.top = parent_group.top group.order_no = Group.get_max_order_no(parent=parent_group) + 1 group.save(update_fields=['order_no', 'parent', 'top'])
def create_group(self, group_info): ''' 创建组 ''' serializer = GroupDetailSerializer(data=group_info) serializer.is_valid(raise_exception=True) serializer.save() group = serializer.instance group.order_no = Group.get_max_order_no(parent=group.parent) + 1 group.save() for perm in Perm.valid_objects.all(): GroupPerm.valid_objects.get_or_create(owner=serializer.instance, perm=perm) return serializer.instance