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
def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.save() if 'private_email' in serializer.validated_data: user.origin = 4 if 'mobile' in serializer.validated_data: user.origin = 3 user.save() cli = CLI(user) cli.add_users_to_group([user], Group.get_extern_root()) data = self.read_serializer_class(user).data data.update(token=user.token) return Response(data, status=status.HTTP_201_CREATED)
def _auto_create_manager_group(request, child_group): ''' 当创建大类时,自动创建子管理员组 成员只有创建者一人,节点范围仅此大类,人员管理范围仅自己,应用管理范围为空 ''' cli = CLI() data = { 'uid': gen_uid(name=uuid_utils.uuid4().hex[:6], cls=Group), 'name': f'管理分组{child_group.name}', 'manager_group': { 'nodes': [child_group.node_uid], 'users': [request.user.username], 'scope_subject': 2, }, } manager_group = cli.create_group(data) parent, _ = Group.valid_objects.get_or_create(uid='manager') cli.add_group_to_group(manager_group, parent) cli.add_users_to_group([request.user], manager_group)
def _auto_create_manager_group(request, app): ''' 当创建应用时,自动创建子管理员组 成员只有创建者一人,节点管理范围为空,人员管理范围仅自己,应用管理范围仅此一个应用 ''' cli = CLI() data = { 'uid': gen_uid(name=uuid_utils.uuid4().hex[:6], cls=Group), 'name': f'管理应用{app.name}', 'manager_group': { 'apps': [app.uid], 'users': [request.user.username], 'scope_subject': 2, } } manager_group = cli.create_group(data) parent, _ = Group.valid_objects.get_or_create(uid='manager') cli.add_group_to_group(manager_group, parent) cli.add_users_to_group([request.user], manager_group)
def create(self, request, *args, **kwargs): ''' qq扫码加绑定 ''' if not AccountConfig.get_current().support_qq_qr_register: return Response({'err_msg': 'qq qr register not allowed'}, HTTP_403_FORBIDDEN) serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = self.perform_create(serializer) cli = CLI(user) cli.add_users_to_group([user], Group.get_extern_root()) data = self.read_serializer_class(user).data data.update(token=user.token) open_id = serializer.validated_data['user_id'] qq_user = QQUser.valid_objects.create(open_id=open_id, user=user) qq_user.save() return Response(data, status=status.HTTP_201_CREATED)