Compare commits

..

4 Commits

Author SHA1 Message Date
ningyv d36c66371f Merge pull request #147 from APIParkLab/fix/fixbug-cx
fix: consumer permission
2024-12-13 20:02:45 +08:00
ningyv b7bb409e96 fix: consumer permission 2024-12-13 20:00:38 +08:00
Dot.L 517007c941 Merge pull request #146 from APIParkLab/feature/aibug-fix
fix aksk bug
2024-12-13 19:41:10 +08:00
Dot.L 1aca2099de Merge pull request #145 from APIParkLab/feature/aibug-fix
fix ai provider upstream bug
2024-12-10 17:26:47 +08:00
11 changed files with 36 additions and 129 deletions
+1 -27
View File
@@ -326,33 +326,7 @@ func (i *imlServiceController) Create(ctx *gin.Context, teamID string, input *se
if input.Kind == "ai" {
return i.createAIService(ctx, teamID, input)
}
var err error
var info *service_dto.Service
err = i.transaction.Transaction(ctx, func(txCtx context.Context) error {
info, err = i.module.Create(txCtx, teamID, input)
if err != nil {
return err
}
path := fmt.Sprintf("/%s/", strings.Trim(input.Prefix, "/"))
_, err = i.routerModule.Create(txCtx, info.Id, &router_dto.Create{
Id: uuid.New().String(),
Name: "",
Path: path + "*",
Methods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete, http.MethodPatch, http.MethodOptions},
Description: "auto create by create service",
Protocols: []string{"http", "https"},
MatchRules: nil,
Upstream: "",
Proxy: &router_dto.InputProxy{
Path: path,
Timeout: 30000,
Retry: 0,
},
Disable: false,
})
return err
})
return info, err
return i.module.Create(ctx, teamID, input)
}
func (i *imlServiceController) Edit(ctx *gin.Context, id string, input *service_dto.EditService) (*service_dto.Service, error) {
+1 -22
View File
@@ -265,8 +265,7 @@ func (i *imlInitController) OnInit() {
return fmt.Errorf("create default team error: %v", err)
}
// 创建Rest服务
restPath := "/rest-demo"
serviceInfo, err := i.serviceModule.Create(ctx, info.Id, &service_dto.CreateService{
_, err = i.serviceModule.Create(ctx, info.Id, &service_dto.CreateService{
Name: "REST Demo Service",
Prefix: "/rest-demo",
Description: "Auto created By APIPark",
@@ -278,26 +277,6 @@ func (i *imlInitController) OnInit() {
if err != nil {
return fmt.Errorf("create default service error: %v", err)
}
path := fmt.Sprintf("/%s/", strings.Trim(restPath, "/"))
_, err = i.routerModule.Create(ctx, serviceInfo.Id, &router_dto.Create{
Id: uuid.NewString(),
Name: "",
Path: path + "*",
Methods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodDelete, http.MethodPatch, http.MethodOptions},
Description: "auto create by create service",
Protocols: []string{"http", "https"},
MatchRules: nil,
Upstream: "",
Proxy: &router_dto.InputProxy{
Path: path,
Timeout: 30000,
Retry: 0,
},
Disable: false,
})
if err != nil {
return fmt.Errorf("create default router error: %v", err)
}
// 创建AI服务
err = i.createAIService(ctx, info.Id, &service_dto.CreateService{
Name: "AI Demo Service",
@@ -146,20 +146,11 @@ export const PublishApprovalModalContent = forwardRef<PublishApprovalModalHandle
...x,
title: typeof x.title === 'string' ? $t(x.title) : x.title,
...(x.dataIndex === 'status' ? {
render:(_,entity)=> {
switch(entity.change){
case 'none':
return '-'
case 'new':
return $t('新建')
case 'update':
return $t('更新')
case 'delete':
return $t('删除')
default:
return '-'
}
}
render:(_,entity)=> (
<span className={`${ApprovalStatusColorClass[entity.change as keyof typeof ApprovalStatusColorClass]} truncate block`}>
{$t(ChangeTypeEnum[entity.change as (keyof typeof ChangeTypeEnum)] || '-')}
</span>
)
}:{})
}
}),[state.language])
@@ -486,17 +486,17 @@ export const PERMISSION_DEFINITION = [
},
"team.application.subscription.add": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.subscription.subscribe"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.subscription.subscribe"] }]
}
},
"team.application.subscription.edit": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.subscription.manager_subscribed_services"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.subscription.manager_subscribed_services"] }]
}
},
"team.application.subscription.delete": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.team.consumer.subscription.manager_subscribed_services"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.team.consumer.subscription.manager_subscribed_services"] }]
}
},
"team.application.application.view": {
@@ -506,47 +506,47 @@ export const PERMISSION_DEFINITION = [
},
"team.application.application.add": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al",'team.team.consumer.manager',"team.consumer.application.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all",'team.team.consumer.manager',"team.consumer.application.manager"] }]
}
},
"team.application.application.edit": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al",'team.team.consumer.manager',"team.consumer.application.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all",'team.team.consumer.manager',"team.consumer.application.manager"] }]
}
},
"team.application.application.delete": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al",'team.team.consumer.manager',"team.consumer.application.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all",'team.team.consumer.manager',"team.consumer.application.manager"] }]
}
},
"team.consumer.authorization.view": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","system.workspace.application.view_all","team.consumer.authorization.view"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","system.workspace.application.view_all","team.consumer.authorization.view"] }]
}
},
"team.application.authorization.add": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.authorization.manager"] }]
}
},
"team.application.authorization.edit": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.authorization.manager"] }]
}
},
"team.application.authorization.delete": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.authorization.manager"] }]
}
},
"team.application.authorization.cancelSubApply": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.authorization.manager"] }]
}
},
"team.application.authorization.cancelSub": {
"granted": {
"anyOf": [{ "backend": ["system.workspace.application.manager_al","team.consumer.authorization.manager"] }]
"anyOf": [{ "backend": ["system.workspace.application.manager_all","team.consumer.authorization.manager"] }]
}
},
"team.team.team.view": {
@@ -88,7 +88,7 @@ const PartitionInsideDashboardSetting: FC = () => {
pageTitle={$t('数据源')}
description={$t("设置监控报表的数据来源,设置完成之后即可获得详细的API调用统计图表。")}
showBorder={false}
scrollPage={true}
scrollPage={false}
>
<div className="flex flex-col overflow-auto pb-PAGE_INSIDE_B pr-PAGE_INSIDE_X">
<Spin wrapperClassName="flex-1" indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} spinning={loading}>
+2 -1
View File
@@ -77,7 +77,8 @@ export default defineConfig({
target: 'http://172.18.166.219:8288/',
changeOrigin: true,
}
}
},
open: true
},
logLevel:'info'
})
@@ -11,7 +11,7 @@ import { RouterParams } from "@core/components/aoplatform/RenderRoutes";
import { SimpleTeamItem } from "@common/const/type";
import { useTenantManagementContext } from "../../../contexts/TenantManagementContext";
import { Icon } from "@iconify/react/dist/iconify.js";
import { useGlobalContext } from "@common/contexts/GlobalStateContext";
import { GlobalProvider, useGlobalContext } from "@common/contexts/GlobalStateContext";
import { $t } from "@common/locales";
import WithPermission from "@common/components/aoplatform/WithPermission";
import InsidePage from "@common/components/aoplatform/InsidePage";
@@ -149,7 +149,7 @@ export default function ServiceHubManagement() {
switch (type){
case 'add':
title=$t('添加消费者')
content=<ManagementConfig ref={addManagementRef} dataShowType={dataShowType} type={type} teamId={teamId!} />
content=<GlobalProvider><ManagementConfig ref={addManagementRef} dataShowType={dataShowType} type={type} teamId={teamId!} /></GlobalProvider>
break;
// case 'edit':{
// title='配置 Open Api'
+1 -5
View File
@@ -3,7 +3,6 @@ package api_doc
import (
"context"
"errors"
api_doc_dto "github.com/APIParkLab/APIPark/module/api-doc/dto"
api_doc "github.com/APIParkLab/APIPark/service/api-doc"
"github.com/APIParkLab/APIPark/service/service"
@@ -21,19 +20,16 @@ type imlAPIDocModule struct {
}
func (i *imlAPIDocModule) UpdateDoc(ctx context.Context, serviceId string, input *api_doc_dto.UpdateDoc) (*api_doc_dto.ApiDocDetail, error) {
info, err := i.serviceService.Get(ctx, serviceId)
_, err := i.serviceService.Get(ctx, serviceId)
if err != nil {
return nil, err
}
if input.Id == "" {
input.Id = uuid.New().String()
}
// 每个API加上前缀
err = i.apiDocService.UpdateDoc(ctx, serviceId, &api_doc.UpdateDoc{
ID: input.Id,
Content: input.Content,
Prefix: info.Prefix,
})
if err != nil {
return nil, err
+1 -12
View File
@@ -76,17 +76,6 @@ func (i *imlAPIDocService) UpdateDoc(ctx context.Context, serviceId string, inpu
if err := doc.Valid(); err != nil {
return err
}
if input.Prefix != "" {
err = doc.AddPrefixInAll(input.Prefix)
if err != nil {
return err
}
}
data, err := doc.Marshal()
if err != nil {
return err
}
input.Content = string(data)
info, err := i.store.First(ctx, map[string]interface{}{
"service": serviceId,
@@ -105,9 +94,9 @@ func (i *imlAPIDocService) UpdateDoc(ctx context.Context, serviceId string, inpu
APICount: doc.APICount(),
})
}
info.Content = input.Content
info.Updater = operator
info.UpdateAt = time.Now()
info.Content = input.Content
info.APICount = doc.APICount()
return i.store.Save(ctx, info)
}
-1
View File
@@ -5,7 +5,6 @@ import "time"
type UpdateDoc struct {
ID string
Content string
Prefix string
}
type Doc struct {
+10 -32
View File
@@ -3,14 +3,10 @@ package api_doc
import (
"context"
"fmt"
"reflect"
"strings"
yaml "gopkg.in/yaml.v3"
"github.com/APIParkLab/APIPark/service/universally/commit"
"github.com/eolinker/go-common/autowire"
"github.com/getkin/kin-openapi/openapi3"
"reflect"
)
type IAPIDocService interface {
@@ -69,6 +65,15 @@ func (d *DocLoader) Valid() error {
if d.openAPI3Doc.Paths == nil {
return fmt.Errorf("openAPI3Doc.Paths is nil")
}
//err := d.openAPI3Doc.Validate(openapi3Loader.Context)
//if err != nil {
// openAPI2Doc, err := openapi2conv.FromV3(d.openAPI3Doc)
// if err != nil {
// return err
// }
// validate.
//
//}
return nil
}
@@ -105,30 +110,3 @@ func (d *DocLoader) APICount() int64 {
}
return count
}
func (d *DocLoader) AddPrefixInAll(prefix string) error {
prefix = strings.TrimSpace(prefix)
if prefix == "" || d.openAPI3Doc == nil || d.openAPI3Doc.Paths == nil {
return nil
}
prefix = fmt.Sprintf("/%s/", strings.Trim(prefix, "/"))
for path, item := range d.openAPI3Doc.Paths.Map() {
path = strings.TrimSpace(path)
if strings.HasPrefix(path, prefix) {
continue
}
newPath := fmt.Sprintf("%s%s", prefix, strings.TrimPrefix(path, "/"))
d.openAPI3Doc.Paths.Delete(path)
d.openAPI3Doc.Paths.Set(newPath, item)
}
return nil
}
func (d *DocLoader) Marshal() ([]byte, error) {
result, err := d.openAPI3Doc.MarshalYAML()
if err != nil {
return nil, err
}
return yaml.Marshal(result)
}