Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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'])
Ejemplo n.º 3
0
 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'])
Ejemplo n.º 4
0
    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