コード例 #1
0
ファイル: group.py プロジェクト: zhiyuChen-aqumon/arkid-core
    def update(self, instance, validated_data):
        '''
        更新子管理员组并重置权限
        '''
        previous_perm_uids = instance.perms
        manager_group = super().update(instance, validated_data)

        perm_uids = validated_data.get('perms', None)
        if perm_uids is None:
            return manager_group

        next_perms = set()
        for perm_uid in validated_data['perms']:
            perm = Perm.valid_objects.filter(uid=perm_uid).first()
            if not perm:
                raise ValidationError({'perms': f'{perm_uid} not found'})
            next_perms.add(perm)

        previous_perms = set()
        for perm_uid in previous_perm_uids:
            perm = Perm.valid_objects.filter(uid=perm_uid).first()
            if perm:
                previous_perms.add(perm)

        group = instance.group
        for perm in previous_perms - next_perms:
            group_perm = GroupPerm.get(group, perm)
            group_perm.boggle()
        for perm in next_perms - previous_perms:
            group_perm = GroupPerm.get(group, perm)
            group_perm.permit()

        return manager_group
コード例 #2
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
コード例 #3
0
ファイル: group.py プロジェクト: zhiyuChen-aqumon/arkid-core
    def create(self, validated_data):
        '''
        创建子管理员组并分配权限
        '''
        perms = []
        for perm_uid in validated_data.get('perms', []):
            perm = Perm.valid_objects.filter(uid=perm_uid).first()
            if not perm:
                raise ValidationError({'perms': f'{perm_uid} not found'})
            perms.append(perm)

        manager_group = super().create(validated_data)
        group = manager_group.group

        for perm in perms:
            group_perm = GroupPerm.get(group, perm)
            group_perm.permit()

        return manager_group