Exemplo n.º 1
0
    def post(self, request):
        serializer = CreateTeamReqSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        team_data = serializer.data

        en = enterprise_services.get_enterprise_by_enterprise_id(request.data.get("enterprise_id"))
        if not en:
            raise serializers.ValidationError("指定企业不存在")
        region = None
        if team_data.get("region", None):
            region = region_services.get_region_by_region_name(team_data.get("region"))
            if not region:
                raise serializers.ValidationError("指定数据中心不存在")
        try:
            user = user_services.get_user_by_user_id(team_data.get("creater", 0))
        except UserNotExistError:
            user = request.user
        code, msg, team = team_services.create_team(user, en, team_alias=team_data["tenant_name"])
        if code == 200 and region:
            code, message, bean = region_services.create_tenant_on_region(team.tenant_name, region.region_name)
            if code != 200:
                team.delete()
                raise serializers.ValidationError("数据中心创建团队时发生错误")
        if code == 200:
            re = TeamBaseInfoSerializer(team)
            return Response(re.data, status=status.HTTP_201_CREATED)
        else:
            return Response(None, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Exemplo n.º 2
0
    def get_enterprise_teams(self,
                             enterprise_id,
                             user_id=None,
                             query=None,
                             page=None,
                             page_size=None):
        from console.services.user_services import user_services
        if query is not None and page is not None and page_size is not None:
            tall = team_repo.get_teams_by_enterprise_id(enterprise_id,
                                                        user_id=user_id,
                                                        query=query)
            total = tall.count()
            paginator = Paginator(tall, page_size)
            raw_tenants = paginator.page(page)
            tenants = []
            for ent in raw_tenants:
                user = user_services.get_user_by_user_id(ent.creater)
                tenants.append({
                    "tenant_id": ent.tenant_id,
                    "tenant_name": ent.tenant_name,
                    "region": ent.region,
                    "is_active": ent.is_active,
                    "create_time": ent.create_time,
                    "creater": user.nick_name,
                    "tenant_alias": ent.tenant_alias,
                    "enterprise_id": ent.enterprise_id,
                })
            result = {"total": total, "tenants": tenants}
        else:
            result = team_repo.get_teams_by_enterprise_id(enterprise_id)

        return result
Exemplo n.º 3
0
    def post(self, request):
        serializer = CreateTeamReqSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        team_data = serializer.data
        team_data["creater"] = self.user.user_id
        team_data["enterprise_id"] = self.enterprise.enterprise_id

        en = self.enterprise
        if not en:
            raise serializers.ValidationError("指定企业不存在")
        region = None
        if team_data.get("region", None):
            region = region_services.get_region_by_region_name(
                team_data.get("region"))
            if not region:
                raise ErrRegionNotFound
        try:
            user = user_services.get_user_by_user_id(
                team_data.get("creater", 0))
        except UserNotExistError:
            user = request.user
        team = team_services.create_team(user,
                                         en,
                                         team_alias=team_data["tenant_name"])
        if region:
            region_services.create_tenant_on_region(
                self.enterprise.enterprise_id, team.tenant_name,
                region.region_name)
        re = TeamBaseInfoSerializer(team)
        return Response(re.data, status=status.HTTP_201_CREATED)
Exemplo n.º 4
0
    def post(self, req, team_id, user_id):
        serializer = CreateTeamUserReqSerializer(data=req.data)
        serializer.is_valid(raise_exception=True)

        try:
            team = team_services.get_team_by_team_id(team_id)
        except Tenants.DoesNotExist:
            raise exceptions.NotFound()

        role_ids = req.data["role_ids"].replace(" ", "").split(",")
        roleids = team_services.get_all_team_role_id(tenant_name=team_id,
                                                     allow_owner=True)
        for role_id in role_ids:
            if int(role_id) not in roleids:
                raise serializers.ValidationError("角色{}不存在".format(role_id),
                                                  status.HTTP_404_NOT_FOUND)

        flag = team_services.user_is_exist_in_team(user_list=[user_id],
                                                   tenant_name=team_id)
        if flag:
            user_obj = user_services.get_user_by_user_id(user_id=user_id)
            raise serializers.ValidationError(
                "用户{}已经存在".format(user_obj.nick_name),
                status.HTTP_400_BAD_REQUEST)

        team_services.add_user_role_to_team(tenant=team,
                                            user_ids=[user_id],
                                            role_ids=role_ids)

        return Response(None, status.HTTP_201_CREATED)
Exemplo n.º 5
0
 def get(self, req, user_id, *args, **kwargs):
     try:
         uid = int(user_id)
         user = user_services.get_user_by_user_id(uid)
     except (ValueError, UserNotExistError):
         try:
             user = user_services.get_user_by_user_name(user_id)
         except UserNotExistError:
             return Response(None, status.HTTP_404_NOT_FOUND)
     serializer = UserInfoSerializer(user)
     return Response(serializer.data)
Exemplo n.º 6
0
 def post(self, request, enterprise_id, *args, **kwargs):
     user_id = request.data.get("user_id")
     try:
         user = user_services.get_user_by_user_id(user_id)
         ent = enterprise_services.get_enterprise_by_enterprise_id(
             enterprise_id)
         if ent is None:
             result = general_message(404, "no found", "未找到该企业")
         else:
             user_services.create_admin_user(user, ent)
             result = general_message(201, "success", None)
     except UserNotExistError:
         result = general_message(404, "no found", "未找到该用户")
     return Response(result, status=201)
Exemplo n.º 7
0
    def post(self, req, *args, **kwargs):
        serializer = CreateAdminUserReqSerializer(data=req.data)
        serializer.is_valid(raise_exception=True)

        try:
            user = user_services.get_user_by_user_id(req.data["user_id"])
        except UserNotExistError:
            raise exceptions.NotFound("用户'{}'不存在".format(req.data["user_id"]))
        ent = enterprise_services.get_enterprise_by_enterprise_id(req.data["eid"])
        if ent is None:
            raise serializers.ValidationError("企业'{}'不存在".format(req.data["eid"]), status.HTTP_404_NOT_FOUND)

        user_services.create_admin_user(user, ent)

        return Response(None, status.HTTP_201_CREATED)
Exemplo n.º 8
0
    def post(self, request, enterprise_id, *args, **kwargs):
        roles = parse_item(request, "roles", required=True, error="at least one role needs to be specified")
        if not set(roles).issubset(EnterpriseRolesEnum.names()):
            raise AbortRequest("invalid roles", msg_show="角色不正确")

        user_id = request.data.get("user_id")
        if user_id == self.user.user_id:
            raise AbortRequest("cannot edit your own role", msg_show="不可操作自己的角色")
        try:
            user = user_services.get_user_by_user_id(user_id)
        except UserNotExistError:
            raise ErrUserNotFound

        ent = enterprise_services.get_enterprise_by_enterprise_id(enterprise_id)
        if ent is None:
            raise ErrEnterpriseNotFound

        user_services.create_admin_user(user, ent, roles)
        return Response(general_message(201, "success", None), status=201)
Exemplo n.º 9
0
    def put(self, req, team_id, *args, **kwargs):
        serializer = UpdateTeamInfoReqSerializer(data=req.data)
        serializer.is_valid(raise_exception=True)

        if req.data.get("enterprise_id", ""):
            ent = enterprise_services.get_enterprise_by_enterprise_id()
            if not ent:
                raise serializers.ValidationError("指定企业不存在", status.HTTP_404_NOT_FOUND)
        if req.data.get("creator", 0):
            try:
                ent = user_services.get_user_by_user_id(req.data.get("creator"))
            except UserNotExistError:
                raise serializers.ValidationError("指定用户不存在", status.HTTP_404_NOT_FOUND)

        try:
            team_services.update(team_id, req.data)
            return Response(None, status.HTTP_200_OK)
        except Tenants.DoesNotExist:
            return Response(None, status.HTTP_404_NOT_FOUND)
Exemplo n.º 10
0
    def post(self, request, team_name, *args, **kwargs):
        """
        团队中添加新用户给用户分配一个角色
        ---
        parameters:
            - name: team_name
              description: 团队名称
              required: true
              type: string
              paramType: path
            - name: user_ids
              description: 添加成员id 格式 {'user_ids':'1,2'}
              required: true
              type: string
              paramType: body
            - name: role_ids
              description: 选择角色 格式{"role_ids": "1,2,3"}
              required: true
              type: string
              paramType: body
        """
        perm_list = team_services.get_user_perm_identitys_in_permtenant(
            user_id=request.user.user_id, tenant_name=team_name)
        # 根据用户在一个团队的角色来获取这个角色对应的所有权限操作
        role_perm_tuple = team_services.get_user_perm_in_tenant(
            user_id=request.user.user_id, tenant_name=team_name)

        no_auth = ("owner" not in perm_list) and (
            "admin" not in perm_list
        ) and "manage_team_member_permissions" not in role_perm_tuple

        if no_auth:
            code = 400
            result = general_message(code, "no identity", "您没有权限做此操作")
            return Response(result, status=code)
        try:
            user_ids = request.data.get('user_ids', None)
            role_ids = request.data.get('role_ids', None)
            if not user_ids:
                raise ParamsError("用户名为空")
            if not role_ids:
                raise ParamsError("角色ID为空")
            try:
                user_ids = [int(user_id) for user_id in user_ids.split(",")]
                role_ids = [int(user_id) for user_id in role_ids.split(",")]
            except Exception as e:
                code = 400
                logger.exception(e)
                result = general_message(code, "Incorrect parameter format",
                                         "参数格式不正确")
                return Response(result, status=code)
            for role_id in role_ids:
                if role_id not in team_services.get_all_team_role_id(
                        tenant_name=team_name):
                    code = 400
                    result = general_message(code, "The role does not exist",
                                             "该角色在团队中不存在")
                    return Response(result, status=code)

            user_id = team_services.user_is_exist_in_team(
                user_list=user_ids, tenant_name=team_name)
            if user_id:
                user_obj = user_services.get_user_by_user_id(user_id=user_id)
                code = 400
                result = general_message(code, "user already exist",
                                         "用户{}已经存在".format(user_obj.nick_name))
                return Response(result, status=code)

            code = 200
            team = team_services.get_tenant(tenant_name=team_name)

            team_services.add_user_role_to_team(request=request,
                                                tenant=team,
                                                user_ids=user_ids,
                                                role_ids=role_ids)
            result = general_message(code, "success",
                                     "用户添加到{}成功".format(team_name))

        except ParamsError as e:
            logging.exception(e)
            code = 400
            result = general_message(code, "params is empty", e.message)
        except UserNotExistError as e:
            code = 400
            result = general_message(code, "user not exist", e.message)
        except Tenants.DoesNotExist as e:
            code = 400
            logger.exception(e)
            result = general_message(code, "tenant not exist",
                                     "{}团队不存在".format(team_name))
        except Exception as e:
            code = 500
            logger.exception(e)
            print(str(e))
            result = general_message(code, "system error", "系统异常")
        return Response(result, status=code)
Exemplo n.º 11
0
    def post(self, request, team_name, *args, **kwargs):
        """
        团队中添加新用户给用户分配一个角色
        ---
        parameters:
            - name: team_name
              description: 团队名称
              required: true
              type: string
              paramType: path
            - name: user_ids
              description: 添加成员id 格式 {'user_ids':'1,2'}
              required: true
              type: string
              paramType: body
            - name: role_ids
              description: 选择角色 格式{"role_ids": "1,2,3"}
              required: true
              type: string
              paramType: body
        """
        try:
            user_ids = request.data.get('user_ids', None)
            role_ids = request.data.get('role_ids', None)
            if not user_ids:
                raise ParamsError("用户名为空")
            if not role_ids:
                raise ParamsError("角色ID为空")
            try:
                user_ids = [int(user_id) for user_id in user_ids.split(",")]
                role_ids = [int(user_id) for user_id in role_ids.split(",")]
            except Exception as e:
                code = 400
                logger.exception(e)
                result = general_message(code, "Incorrect parameter format", "参数格式不正确")
                return Response(result, status=code)

            user_id = team_services.user_is_exist_in_team(user_list=user_ids, tenant_name=team_name)
            if user_id:
                user_obj = user_services.get_user_by_user_id(user_id=user_id)
                code = 400
                result = general_message(code, "user already exist", "用户{}已经存在".format(user_obj.nick_name))
                return Response(result, status=code)

            code = 200
            team = team_services.get_tenant(tenant_name=team_name)
            team_services.add_user_role_to_team(tenant=team, user_ids=user_ids, role_ids=role_ids)
            result = general_message(code, "success", "用户添加到{}成功".format(team_name))

        except ParamsError as e:
            logging.exception(e)
            code = 400
            result = general_message(code, "params is empty", e.message)
        except UserNotExistError as e:
            code = 400
            result = general_message(code, "user not exist", e.message)
        except Tenants.DoesNotExist as e:
            code = 400
            logger.exception(e)
            result = general_message(code, "tenant not exist", "{}团队不存在".format(team_name))
        return Response(result, status=code)