Beispiel #1
0
    def core_post(users_file, node_uid):
        '''
        creat or update users
        '''
        cli = CLI()

        reader = csv.DictReader(io.StringIO(users_file.read().decode('utf-8')))
        res = []
        users = []
        for index, row in enumerate(reader):
            username = row.get('username')
            user = User.valid_objects.filter(username=username).first()

            try:
                if user:
                    cli.update_user(user, row)
                else:
                    user = cli.create_user(row)
            except ValidationError as exc:
                raise ValidationError({index + 1: exc.detail})

            users.append(user)    # 重复导入的后果可以接受,故不处理
            res.append(UserCSVSerializer(user).data)

        if node_uid:
            node, node_subject = TreeNode.retrieve_node(node_uid)
            if node_subject == 'dept':
                cli.add_users_to_dept(users, node)
            elif node_subject == 'group':
                cli.add_users_to_group(users, node)
            else:
                raise ValueError

        return res
Beispiel #2
0
 def create(self, validated_data):
     '''
     创建用户
     '''
     cli = CLI()
     password = validated_data.pop('password')
     user = cli.create_user(validated_data)
     user.from_register = True
     user.save()
     cli.set_user_password(user, password)
     return user
Beispiel #3
0
    def create(self, request, *args, **kwargs):  # pylint: disable=unused-argument
        '''
        create user [POST]
        '''
        data = request.data
        user_info = data.get('user', '')

        group_uids = []
        dept_uids = []

        node_uids = data.get('node_uids', [])
        if node_uids:
            for node_uid in node_uids:
                if node_uid.startswith(Dept.NODE_PREFIX):
                    dept_uids.append(node_uid.replace(Dept.NODE_PREFIX, '', 1))
                elif node_uid.startswith(Group.NODE_PREFIX):
                    group_uids.append(node_uid.replace(
                        Group.NODE_PREFIX,
                        '',
                    ))
        else:
            group_uids = data.get('group_uids', [])
            dept_uids = data.get('dept_uids', [])
        cli = CLI()
        password = user_info.pop('password', None)
        # 创建用户
        user = cli.create_user(user_info)
        if password:
            validate_password(password)
            cli.set_user_password(user, password)
        user.origin = 1  # 管理员添加
        user.save()
        # 分配组和部门
        self.assign_user(user, dept_uids=dept_uids, group_uids=group_uids)
        user_serializer = EmployeeSerializer(user)
        transaction.on_commit(lambda: WebhookManager.user_created(user))
        return Response(
            user_serializer.data,
            status=status.HTTP_201_CREATED,
            headers=self.get_success_headers(user_serializer.data),
        )