diff --git a/controller/service/iml.go b/controller/service/iml.go index b8cfdc8a..70969bf7 100644 --- a/controller/service/iml.go +++ b/controller/service/iml.go @@ -212,10 +212,7 @@ func (i *imlServiceController) createAIService(ctx *gin.Context, teamID string, if err != nil { return err } - //_, err = i.upstreamModule.Save(ctx, info.Id, newAIUpstream(info.Id, *input.Provider, p.URI())) - //if err != nil { - // return err - //} + return i.docModule.SaveServiceDoc(ctx, info.Id, &service_dto.SaveServiceDoc{ Doc: "The Translation API allows developers to translate text from one language to another. It supports multiple languages and enables easy integration of high-quality translation features into applications. With simple API requests, you can quickly translate content into different target languages.", }) @@ -279,6 +276,10 @@ type imlAppController struct { authModule application_authorization.IAuthorizationModule `autowired:""` } +func (i *imlAppController) SearchCanSubscribe(ctx *gin.Context, serviceId string) ([]*service_dto.SimpleAppItem, error) { + return i.module.SearchCanSubscribe(ctx, serviceId) +} + func (i *imlAppController) Search(ctx *gin.Context, teamId string, keyword string) ([]*service_dto.AppItem, error) { return i.module.Search(ctx, teamId, keyword) } diff --git a/controller/service/service.go b/controller/service/service.go index 3f19cd66..e64354e3 100644 --- a/controller/service/service.go +++ b/controller/service/service.go @@ -42,6 +42,7 @@ type IAppController interface { // SimpleApps 获取简易项目列表 SimpleApps(ctx *gin.Context, keyword string) ([]*service_dto.SimpleAppItem, error) MySimpleApps(ctx *gin.Context, keyword string) ([]*service_dto.SimpleAppItem, error) + SearchCanSubscribe(ctx *gin.Context, keyword string) ([]*service_dto.SimpleAppItem, error) GetApp(ctx *gin.Context, appId string) (*service_dto.App, error) DeleteApp(ctx *gin.Context, appId string) error } diff --git a/go.mod b/go.mod index ad9e5dab..1a433dcd 100644 --- a/go.mod +++ b/go.mod @@ -75,4 +75,6 @@ require ( gorm.io/driver/mysql v1.5.2 // indirect ) -replace github.com/eolinker/ap-account => ../aoaccount +replace github.com/eolinker/ap-account => ../../eolinker/ap-account + +replace github.com/eolinker/go-common => ../../eolinker/go-common diff --git a/go.sum b/go.sum index 40b6a55c..60baf8c1 100644 --- a/go.sum +++ b/go.sum @@ -28,12 +28,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eolinker/ap-account v1.0.14 h1:QE9LWx9F/t/BbTeBcjPX+Alzh3mdlHv+BVvKcBwr5dc= -github.com/eolinker/ap-account v1.0.14/go.mod h1:qLKg4xervGHTNBWaGckfPkQb+FZT0XfhwPEdNpzvsjE= github.com/eolinker/eosc v0.17.3 h1:sr2yT+v/AsqEdciRaaZZj0zL9pTufR5RvDW6+65hraQ= github.com/eolinker/eosc v0.17.3/go.mod h1:xgq816hpanlMXFtZw7Ztdctb1eEk9UPHchY4NfFO6Cw= -github.com/eolinker/go-common v1.1.0 h1:n/XXK7yVRen3jhNG/SfZGXJA+KNnaYf0XTDfMeviaBw= -github.com/eolinker/go-common v1.1.0/go.mod h1:Kb/jENMN1mApnodvRgV4YwO9FJby1Jkt2EUjrBjvSX4= github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I= github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s= github.com/getkin/kin-openapi v0.127.0 h1:Mghqi3Dhryf3F8vR370nN67pAERW+3a95vomb3MAREY= diff --git a/module/service/iml.go b/module/service/iml.go index 04d478a1..79400ac8 100644 --- a/module/service/iml.go +++ b/module/service/iml.go @@ -7,6 +7,10 @@ import ( "sort" "strings" + "github.com/APIParkLab/APIPark/resources/access" + + "github.com/eolinker/ap-account/service/role" + application_authorization "github.com/APIParkLab/APIPark/service/application-authorization" api_doc "github.com/APIParkLab/APIPark/service/api-doc" @@ -539,9 +543,72 @@ type imlAppModule struct { teamMemberService team_member.ITeamMemberService `autowired:""` subscribeService subscribe.ISubscribeService `autowired:""` authService application_authorization.IAuthorizationService `autowired:""` + roleService role.IRoleService `autowired:""` + roleMemberService role.IRoleMemberService `autowired:""` transaction store.ITransaction `autowired:""` } +func (i *imlAppModule) SearchCanSubscribe(ctx context.Context, serviceId string) ([]*service_dto.SimpleAppItem, error) { + apps, err := i.searchMyApps(ctx, "", "") + if err != nil { + return nil, err + } + list, err := i.roleService.ListByPermit(ctx, access.SystemWorkspaceApplicationManagerAll) + if err == nil && len(list) > 0 { + return utils.SliceToSlice(apps, func(p *service.Service) *service_dto.SimpleAppItem { + return &service_dto.SimpleAppItem{ + Id: p.Id, + Name: p.Name, + Description: p.Description, + Team: auto.UUID(p.Team), + } + }), nil + } + list, err = i.roleService.ListByPermit(ctx, access.TeamConsumerSubscriptionSubscribe) + if err != nil { + return nil, nil + } + roleIds := utils.SliceToSlice(list, func(p *role.RoleByPermit) string { + return p.Id + }) + members, err := i.roleMemberService.ListByRoleIds(ctx, utils.UserId(ctx), roleIds...) + if err != nil { + return nil, err + } + if len(members) == 0 { + return nil, nil + } + subscribes, err := i.subscribeService.ListByServices(ctx, serviceId) + if err != nil { + return nil, err + } + subscribeMap := utils.SliceToMapO(subscribes, func(p *subscribe.Subscribe) (string, struct{}) { + return p.Application, struct{}{} + }, func(s *subscribe.Subscribe) bool { + return s.ApplyStatus == subscribe.ApplyStatusSubscribe + }) + teamMap := utils.SliceToMapO(members, func(p *role.Member) (string, struct{}) { + return role.TrimTeamTarget(p.Target), struct{}{} + }) + result := make([]*service_dto.SimpleAppItem, 0, len(apps)) + for _, app := range apps { + if _, ok := teamMap[app.Team]; !ok { + continue + } + if _, ok := subscribeMap[app.Id]; ok { + continue + } + result = append(result, &service_dto.SimpleAppItem{ + Id: app.Id, + Name: app.Name, + Description: app.Description, + Team: auto.UUID(app.Team), + }) + } + + return result, nil +} + func (i *imlAppModule) ExportAll(ctx context.Context) ([]*service_dto.ExportApp, error) { apps, err := i.serviceService.AppList(ctx) if err != nil { diff --git a/module/service/module.go b/module/service/module.go index 4ff83857..31afdede 100644 --- a/module/service/module.go +++ b/module/service/module.go @@ -47,6 +47,7 @@ type IAppModule interface { UpdateApp(ctx context.Context, appId string, input *service_dto.UpdateApp) (*service_dto.App, error) Search(ctx context.Context, teamId string, keyword string) ([]*service_dto.AppItem, error) SearchMyApps(ctx context.Context, teamId string, keyword string) ([]*service_dto.AppItem, error) + SearchCanSubscribe(ctx context.Context, serviceId string) ([]*service_dto.SimpleAppItem, error) // SimpleApps 获取简易项目列表 SimpleApps(ctx context.Context, keyword string) ([]*service_dto.SimpleAppItem, error) MySimpleApps(ctx context.Context, keyword string) ([]*service_dto.SimpleAppItem, error) diff --git a/plugins/core/ai.go b/plugins/core/ai.go index d1d9e602..2e0d2fd0 100644 --- a/plugins/core/ai.go +++ b/plugins/core/ai.go @@ -1,19 +1,22 @@ package core import ( - "github.com/eolinker/go-common/pm3" "net/http" + + "github.com/APIParkLab/APIPark/resources/access" + + "github.com/eolinker/go-common/pm3" ) func (p *plugin) aiAPIs() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/providers", []string{"context"}, []string{"providers"}, p.aiProviderController.Providers), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/ai/providers", []string{"context"}, []string{"providers"}, p.aiProviderController.SimpleProviders), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/provider/config", []string{"context", "query:provider"}, []string{"provider"}, p.aiProviderController.Provider), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/providers", []string{"context"}, []string{"providers"}, p.aiProviderController.Providers, access.SystemSettingsAiProviderView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/ai/providers", []string{"context"}, []string{"providers"}, p.aiProviderController.SimpleProviders, access.SystemSettingsAiProviderView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/provider/config", []string{"context", "query:provider"}, []string{"provider"}, p.aiProviderController.Provider, access.SystemSettingsAiProviderView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai/provider/llms", []string{"context", "query:provider"}, []string{"llms", "provider"}, p.aiProviderController.LLMs), //pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/enable", []string{"context", "query:provider"}, nil, p.aiProviderController.Enable), //pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/disable", []string{"context", "query:provider"}, nil, p.aiProviderController.Disable), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/config", []string{"context", "query:provider", "body"}, nil, p.aiProviderController.UpdateProviderConfig), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/default-llm", []string{"context", "query:provider", "body"}, nil, p.aiProviderController.UpdateProviderDefaultLLM), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/config", []string{"context", "query:provider", "body"}, nil, p.aiProviderController.UpdateProviderConfig, access.SystemSettingsAiProviderManager), + //pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai/provider/default-llm", []string{"context", "query:provider", "body"}, nil, p.aiProviderController.UpdateProviderDefaultLLM), } } diff --git a/plugins/core/api.go b/plugins/core/api.go index 4655573f..666cf769 100644 --- a/plugins/core/api.go +++ b/plugins/core/api.go @@ -3,27 +3,28 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) apiApis() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/routers", []string{"context", "query:keyword", "query:service"}, []string{"routers"}, p.routerController.Search), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/router/detail", []string{"context", "query:service", "query:router"}, []string{"router"}, p.routerController.Detail), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/router", []string{"context", "query:service", "body"}, []string{"router"}, p.routerController.Create), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/router", []string{"context", "query:service", "query:router", "body"}, []string{"router"}, p.routerController.Edit), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/router", []string{"context", "query:service", "query:router"}, nil, p.routerController.Delete), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/routers", []string{"context", "query:keyword", "query:service"}, []string{"routers"}, p.routerController.Search, access.SystemWorkspaceServiceViewAll, access.TeamServiceApiView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/router/detail", []string{"context", "query:service", "query:router"}, []string{"router"}, p.routerController.Detail, access.SystemWorkspaceServiceViewAll, access.TeamServiceApiView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/router", []string{"context", "query:service", "body"}, []string{"router"}, p.routerController.Create, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiManager), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/router", []string{"context", "query:service", "query:router", "body"}, []string{"router"}, p.routerController.Edit, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/router", []string{"context", "query:service", "query:router"}, nil, p.routerController.Delete, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiManager), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/router/define", []string{"context", "query:service"}, []string{"prefix", "force"}, p.routerController.Prefix), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/api_doc", []string{"context", "query:service", "body"}, []string{"doc"}, p.apiDocController.UpdateDoc), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/api_doc", []string{"context", "query:service"}, []string{"doc"}, p.apiDocController.GetDoc), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/api_doc", []string{"context", "query:service", "body"}, []string{"doc"}, p.apiDocController.UpdateDoc, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiDocManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/api_doc", []string{"context", "query:service"}, []string{"doc"}, p.apiDocController.GetDoc, access.SystemWorkspaceServiceViewAll, access.TeamServiceApiDocView), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/api_doc/upload", []string{"context", "query:service"}, []string{"doc"}, p.apiDocController.UploadDoc), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/api_doc/upload", []string{"context", "query:service"}, []string{"doc"}, p.apiDocController.UploadDoc, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiDocManager), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/ai-router", []string{"context", "query:service", "query:router"}, []string{"api"}, p.aiAPIController.Get), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/ai-routers", []string{"context", "query:keyword", "query:service"}, []string{"apis"}, p.aiAPIController.List), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/ai-router", []string{"context", "query:service", "query:router", "body"}, []string{"api"}, p.aiAPIController.Edit), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/ai-router", []string{"context", "query:service", "body"}, []string{"api"}, p.aiAPIController.Create), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/ai-router", []string{"context", "query:service", "query:router"}, nil, p.aiAPIController.Delete), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/ai-router", []string{"context", "query:service", "query:router"}, []string{"api"}, p.aiAPIController.Get, access.SystemWorkspaceServiceViewAll, access.TeamServiceApiView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/ai-routers", []string{"context", "query:keyword", "query:service"}, []string{"apis"}, p.aiAPIController.List, access.SystemWorkspaceServiceViewAll, access.TeamServiceApiView), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/ai-router", []string{"context", "query:service", "query:router", "body"}, []string{"api"}, p.aiAPIController.Edit, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiManager), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/ai-router", []string{"context", "query:service", "body"}, []string{"api"}, p.aiAPIController.Create, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/ai-router", []string{"context", "query:service", "query:router"}, nil, p.aiAPIController.Delete, access.SystemWorkspaceServiceManagerAll, access.TeamServiceApiManager), } } diff --git a/plugins/core/project-authorization.go b/plugins/core/authorization.go similarity index 50% rename from plugins/core/project-authorization.go rename to plugins/core/authorization.go index e2ad3db7..0754c5e3 100644 --- a/plugins/core/project-authorization.go +++ b/plugins/core/authorization.go @@ -3,16 +3,17 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) -func (p *plugin) projectAuthorizationApis() []pm3.Api { +func (p *plugin) appAuthorizationApis() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/app/authorization", []string{"context", "query:app", "body"}, []string{"authorization"}, p.appAuthorizationController.AddAuthorization), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/app/authorization", []string{"context", "query:app", "query:authorization", "body"}, []string{"authorization"}, p.appAuthorizationController.EditAuthorization), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/app/authorization", []string{"context", "query:app", "query:authorization"}, nil, p.appAuthorizationController.DeleteAuthorization), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/authorization", []string{"context", "query:app", "query:authorization"}, []string{"authorization"}, p.appAuthorizationController.Info), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/authorizations", []string{"context", "query:app"}, []string{"authorizations"}, p.appAuthorizationController.Authorizations), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/authorization/details", []string{"context", "query:app", "query:authorization"}, []string{"details"}, p.appAuthorizationController.Detail), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/app/authorization", []string{"context", "query:app", "body"}, []string{"authorization"}, p.appAuthorizationController.AddAuthorization, access.SystemWorkspaceApplicationManagerAll, access.TeamConsumerAuthorizationManager), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/app/authorization", []string{"context", "query:app", "query:authorization", "body"}, []string{"authorization"}, p.appAuthorizationController.EditAuthorization, access.SystemWorkspaceApplicationManagerAll, access.TeamConsumerAuthorizationManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/app/authorization", []string{"context", "query:app", "query:authorization"}, nil, p.appAuthorizationController.DeleteAuthorization, access.SystemWorkspaceApplicationManagerAll, access.TeamConsumerAuthorizationManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/authorization", []string{"context", "query:app", "query:authorization"}, []string{"authorization"}, p.appAuthorizationController.Info, access.SystemWorkspaceApplicationViewAll, access.TeamConsumerAuthorizationView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/authorizations", []string{"context", "query:app"}, []string{"authorizations"}, p.appAuthorizationController.Authorizations, access.SystemWorkspaceApplicationViewAll, access.TeamConsumerAuthorizationView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/authorization/details", []string{"context", "query:app", "query:authorization"}, []string{"details"}, p.appAuthorizationController.Detail, access.SystemWorkspaceApplicationViewAll, access.TeamConsumerAuthorizationView), } } diff --git a/plugins/core/certificate.go b/plugins/core/certificate.go index cb3fa5eb..d9514316 100644 --- a/plugins/core/certificate.go +++ b/plugins/core/certificate.go @@ -3,15 +3,16 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) certificateApi() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/certificates", []string{"context"}, []string{"certificates"}, p.certificateController.ListForPartition), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/certificate", []string{"context", "query:id"}, []string{"certificate", "cert"}, p.certificateController.Detail), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/certificate", []string{"context", "body"}, nil, p.certificateController.Create), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/certificate", []string{"context", "query:id", "body"}, nil, p.certificateController.Update), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/certificate", []string{"context", "query:id"}, []string{"id"}, p.certificateController.Delete), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/certificates", []string{"context"}, []string{"certificates"}, p.certificateController.ListForPartition, access.SystemSettingsSslCertificateView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/certificate", []string{"context", "query:id"}, []string{"certificate", "cert"}, p.certificateController.Detail, access.SystemSettingsSslCertificateView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/certificate", []string{"context", "body"}, nil, p.certificateController.Create, access.SystemSettingsSslCertificateManager), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/certificate", []string{"context", "query:id", "body"}, nil, p.certificateController.Update, access.SystemSettingsSslCertificateManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/certificate", []string{"context", "query:id"}, []string{"id"}, p.certificateController.Delete, access.SystemSettingsSslCertificateManager), } } diff --git a/plugins/core/cluster.go b/plugins/core/cluster.go index 7708b264..0316ead6 100644 --- a/plugins/core/cluster.go +++ b/plugins/core/cluster.go @@ -3,13 +3,14 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) clusterApi() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/cluster/nodes", []string{"context", "query:partition"}, []string{"nodes"}, p.clusterController.Nodes), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/cluster/reset", []string{"context", "query:partition", "body"}, []string{"nodes"}, p.clusterController.ResetCluster), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/cluster/check", []string{"context", "body"}, []string{"nodes"}, p.clusterController.Check), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/cluster/nodes", []string{"context", "query:partition"}, []string{"nodes"}, p.clusterController.Nodes, access.SystemSettingsApiGatewayView), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/cluster/reset", []string{"context", "query:partition", "body"}, []string{"nodes"}, p.clusterController.ResetCluster, access.SystemSettingsApiGatewayManager), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/cluster/check", []string{"context", "body"}, []string{"nodes"}, p.clusterController.Check, access.SystemSettingsApiGatewayManager), } } diff --git a/plugins/core/core.go b/plugins/core/core.go index e194b191..8d7168ca 100644 --- a/plugins/core/core.go +++ b/plugins/core/core.go @@ -97,7 +97,7 @@ func (p *plugin) OnComplete() { p.apis = append(p.apis, p.upstreamApis()...) p.apis = append(p.apis, p.apiApis()...) p.apis = append(p.apis, p.subscribeApis()...) - p.apis = append(p.apis, p.projectAuthorizationApis()...) + p.apis = append(p.apis, p.appAuthorizationApis()...) p.apis = append(p.apis, p.releaseApis()...) p.apis = append(p.apis, p.DynamicModuleApis()...) p.apis = append(p.apis, p.monitorStatisticApis()...) diff --git a/plugins/core/monitor.go b/plugins/core/monitor.go index ca6025b1..5b8a53e1 100644 --- a/plugins/core/monitor.go +++ b/plugins/core/monitor.go @@ -3,18 +3,19 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) monitorStatisticApis() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/top10", []string{"context", "body"}, []string{"top10"}, p.monitorStatisticController.Top10), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/summary", []string{"context", "body"}, []string{"request_summary", "proxy_summary"}, p.monitorStatisticController.Summary), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/invoke", []string{"context", "body"}, []string{"date", "request_total", "proxy_total", "status_4xx", "status_5xx", "request_rate", "proxy_rate", "time_interval"}, p.monitorStatisticController.OverviewInvokeTrend), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/message", []string{"context", "body"}, []string{"date", "request_message", "response_message", "time_interval"}, p.monitorStatisticController.OverviewMessageTrend), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/top10", []string{"context", "body"}, []string{"top10"}, p.monitorStatisticController.Top10, access.SystemAnalysisRunViewView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/summary", []string{"context", "body"}, []string{"request_summary", "proxy_summary"}, p.monitorStatisticController.Summary, access.SystemAnalysisRunViewView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/invoke", []string{"context", "body"}, []string{"date", "request_total", "proxy_total", "status_4xx", "status_5xx", "request_rate", "proxy_rate", "time_interval"}, p.monitorStatisticController.OverviewInvokeTrend, access.SystemAnalysisRunViewView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/overview/message", []string{"context", "body"}, []string{"date", "request_message", "response_message", "time_interval"}, p.monitorStatisticController.OverviewMessageTrend, access.SystemAnalysisRunViewView), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/config", []string{"context", "body"}, []string{"info"}, p.monitorConfigController.SaveMonitorConfig), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/monitor/config", []string{"context"}, []string{"info"}, p.monitorConfigController.GetMonitorConfig), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/monitor/config", []string{"context", "body"}, []string{"info"}, p.monitorConfigController.SaveMonitorConfig, access.SystemSettingsDataSourceManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/monitor/config", []string{"context"}, []string{"info"}, p.monitorConfigController.GetMonitorConfig, access.SystemSettingsDataSourceView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/monitor/clusters", []string{"context"}, []string{"clusters"}, p.monitorConfigController.GetMonitorCluster), } } diff --git a/plugins/core/my-team.go b/plugins/core/my-team.go index 68ef6c4f..e8d963a0 100644 --- a/plugins/core/my-team.go +++ b/plugins/core/my-team.go @@ -3,27 +3,28 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) MyTeamApi() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team", []string{"context", "query:team"}, []string{"team"}, p.myTeamController.GetTeam), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team", []string{"context", "query:team"}, []string{"team"}, p.myTeamController.GetTeam, access.SystemWorkspaceTeamViewAll, access.TeamTeamTeamView), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/teams", []string{"context", "query:keyword"}, []string{"teams"}, p.myTeamController.Search), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/teams/mine", []string{"context", "query:keyword"}, []string{"teams"}, p.myTeamController.MySimpleTeams), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/teams", []string{"context", "query:keyword"}, []string{"teams"}, p.myTeamController.SimpleTeams), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team/members/simple", []string{"context", "query:team", "query:keyword"}, []string{"teams"}, p.myTeamController.SimpleMembers), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/team", []string{"context", "query:team", "body"}, []string{"team"}, p.myTeamController.EditTeam), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/member", []string{"context", "query:team", "body"}, nil, p.myTeamController.AddMember), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/team/member", []string{"context", "query:team", "query:user"}, nil, p.myTeamController.RemoveMember), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team/members", []string{"context", "query:team", "query:keyword"}, []string{"members"}, p.myTeamController.Members), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/team", []string{"context", "query:team", "body"}, []string{"team"}, p.myTeamController.EditTeam, access.SystemWorkspaceTeamManager, access.TeamTeamTeamManager), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/member", []string{"context", "query:team", "body"}, nil, p.myTeamController.AddMember, access.SystemWorkspaceTeamManager, access.TeamTeamMemberManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/team/member", []string{"context", "query:team", "query:user"}, nil, p.myTeamController.RemoveMember, access.SystemWorkspaceTeamManager, access.TeamTeamMemberManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team/members", []string{"context", "query:team", "query:keyword"}, []string{"members"}, p.myTeamController.Members, access.SystemWorkspaceTeamViewAll, access.TeamTeamMemberView), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/team/member/role", []string{"context", "query:team", "body"}, nil, p.myTeamController.UpdateMemberRole), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/team/member/role", []string{"context", "query:team", "body"}, nil, p.myTeamController.UpdateMemberRole, access.SystemWorkspaceTeamManager, access.TeamTeamMemberManager), // 团队项目操作 - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team/services", []string{"context", "query:team", "query:keyword"}, []string{"services"}, p.serviceController.Search), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/service", []string{"context", "query:team", "body"}, []string{"service"}, p.serviceController.Create), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/app", []string{"context", "query:team", "body"}, []string{"app"}, p.appController.CreateApp), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/team/service", []string{"context", "query:service"}, nil, p.serviceController.Delete), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/team/services", []string{"context", "query:team", "query:keyword"}, []string{"services"}, p.serviceController.Search, access.SystemWorkspaceServiceViewAll, access.TeamTeamServiceView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/service", []string{"context", "query:team", "body"}, []string{"service"}, p.serviceController.Create, access.SystemWorkspaceServiceManagerAll, access.TeamTeamServiceManager), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/app", []string{"context", "query:team", "body"}, []string{"app"}, p.appController.CreateApp, access.SystemWorkspaceApplicationManagerAll, access.TeamTeamConsumerManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/team/service", []string{"context", "query:service"}, nil, p.serviceController.Delete, access.SystemWorkspaceServiceManagerAll, access.TeamTeamServiceManager), } } diff --git a/plugins/core/release.go b/plugins/core/release.go index 750d6bfd..3a0f365a 100644 --- a/plugins/core/release.go +++ b/plugins/core/release.go @@ -3,16 +3,17 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) releaseApis() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/release", []string{"context", "query:service", "body"}, []string{}, p.releaseController.Create), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/release", []string{"context", "query:service", "query:id"}, []string{}, p.releaseController.Delete), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/release", []string{"context", "query:service", "query:id"}, []string{"release"}, p.releaseController.Detail), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/releases", []string{"context", "query:service"}, []string{"releases"}, p.releaseController.List), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/release/preview", []string{"context", "query:service"}, []string{"running", "diff", "complete"}, p.releaseController.Preview), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/service/release", []string{"context", "query:service", "body"}, []string{}, p.releaseController.Create, access.SystemWorkspaceServiceManagerAll, access.TeamServiceReleaseManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/release", []string{"context", "query:service", "query:id"}, []string{}, p.releaseController.Delete, access.SystemWorkspaceServiceManagerAll, access.TeamServiceReleaseManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/release", []string{"context", "query:service", "query:id"}, []string{"release"}, p.releaseController.Detail, access.SystemWorkspaceServiceViewAll, access.TeamServiceReleaseView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/releases", []string{"context", "query:service"}, []string{"releases"}, p.releaseController.List, access.SystemWorkspaceServiceViewAll, access.TeamServiceReleaseView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/release/preview", []string{"context", "query:service"}, []string{"running", "diff", "complete"}, p.releaseController.Preview, access.SystemWorkspaceServiceViewAll, access.TeamServiceReleaseView), } } diff --git a/plugins/core/service.go b/plugins/core/service.go index 3d42ffba..eaec81bd 100644 --- a/plugins/core/service.go +++ b/plugins/core/service.go @@ -3,40 +3,29 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) ServiceApis() []pm3.Api { return []pm3.Api{ // 项目 - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/info", []string{"context", "query:service"}, []string{"service"}, p.serviceController.Get), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/info", []string{"context", "query:service", "body"}, []string{"service"}, p.serviceController.Edit), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/info", []string{"context", "query:service"}, nil, p.serviceController.Delete), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/info", []string{"context", "query:service"}, []string{"service"}, p.serviceController.Get, access.SystemWorkspaceServiceViewAll, access.TeamTeamServiceView), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/info", []string{"context", "query:service", "body"}, []string{"service"}, p.serviceController.Edit, access.SystemWorkspaceServiceManagerAll, access.TeamTeamServiceManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/service/info", []string{"context", "query:service"}, nil, p.serviceController.Delete, access.SystemWorkspaceServiceManagerAll, access.TeamTeamServiceManager), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/my_services", []string{"context", "query:team", "query:keyword"}, []string{"services"}, p.serviceController.SearchMyServices), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/services", []string{"context", "query:team", "query:keyword"}, []string{"services"}, p.serviceController.Search), - - //pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/services/mine", []string{"context", "query:keyword"}, []string{"services"}, p.serviceController.MySimple), - // - //pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/services", []string{"context", "query:keyword"}, []string{"services"}, p.serviceController.Simple), - - // AI服务 - //pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai-services", []string{"context", "query:service", "query:keyword"}, []string{"services"}, p.serviceController.SearchAIServices), - //pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/team/ai-service", []string{"context", "query:team", "body"}, []string{"service"}, p.serviceController.CreateAIService), - //pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/ai-service/info", []string{"context", "query:service", "body"}, []string{"service"}, p.serviceController.EditAIService), - //pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/team/ai-service", []string{"context", "query:service"}, nil, p.serviceController.DeleteAIService), - //pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/my_ai_services", []string{"context", "query:team", "query:keyword"}, []string{"services"}, p.serviceController.SearchMyAIServices), - //pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/ai-service/info", []string{"context", "query:service"}, []string{"service"}, p.serviceController.Get), - + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/services", []string{"context", "query:team", "query:keyword"}, []string{"services"}, p.serviceController.Search, access.SystemWorkspaceServiceViewAll, access.TeamTeamServiceView), // 应用相关 - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/info", []string{"context", "query:app"}, []string{"app"}, p.appController.GetApp), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/app", []string{"context", "query:app"}, nil, p.appController.DeleteApp), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/app/info", []string{"context", "query:app"}, []string{"app"}, p.appController.GetApp, access.SystemWorkspaceApplicationViewAll, access.TeamTeamConsumerView), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/app", []string{"context", "query:app"}, nil, p.appController.DeleteApp, access.SystemWorkspaceApplicationManagerAll, access.TeamTeamConsumerManager), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/apps", []string{"context", "query:keyword"}, []string{"apps"}, p.appController.SimpleApps), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/simple/apps/mine", []string{"context", "query:keyword"}, []string{"apps"}, p.appController.MySimpleApps), pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/my_apps", []string{"context", "query:team", "query:keyword"}, []string{"apps"}, p.appController.SearchMyApps), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/apps", []string{"context", "query:team", "query:keyword"}, []string{"apps"}, p.appController.Search), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/app/info", []string{"context", "query:app", "body"}, []string{"app"}, p.appController.UpdateApp), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/apps", []string{"context", "query:team", "query:keyword"}, []string{"apps"}, p.appController.Search, access.SystemWorkspaceApplicationViewAll), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/apps/can_subscribe", []string{"context", "query:"}, []string{"app"}, p.appController.SearchCanSubscribe), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/app/info", []string{"context", "query:app", "body"}, []string{"app"}, p.appController.UpdateApp, access.SystemWorkspaceApplicationManagerAll, access.TeamTeamConsumerManager), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/doc", []string{"context", "query:service"}, []string{"doc"}, p.serviceController.ServiceDoc), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/doc", []string{"context", "query:service", "body"}, nil, p.serviceController.SaveServiceDoc), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/doc", []string{"context", "query:service"}, []string{"doc"}, p.serviceController.ServiceDoc, access.SystemWorkspaceServiceViewAll, access.TeamServiceServiceIntroView), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/doc", []string{"context", "query:service", "body"}, nil, p.serviceController.SaveServiceDoc, access.SystemWorkspaceServiceManagerAll, access.TeamServiceServiceIntroManager), } } diff --git a/plugins/core/square.go b/plugins/core/square.go index 486858ef..d6e7741a 100644 --- a/plugins/core/square.go +++ b/plugins/core/square.go @@ -3,18 +3,19 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) catalogueApi() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/catalogues", []string{"context", "query:keyword"}, []string{"catalogues", "tags"}, p.catalogueController.Search), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/catalogue", []string{"context", "body"}, nil, p.catalogueController.Create), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/catalogue", []string{"context", "query:catalogue", "body"}, nil, p.catalogueController.Edit), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/catalogue", []string{"context", "query:catalogue"}, nil, p.catalogueController.Delete), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/catalogue/sort", []string{"context", "body"}, nil, p.catalogueController.Sort), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/catalogue/services", []string{"context", "query:keyword"}, []string{"services"}, p.catalogueController.Services), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/catalogue/service", []string{"context", "query:service"}, []string{"service"}, p.catalogueController.ServiceDetail), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/catalogues", []string{"context", "query:keyword"}, []string{"catalogues", "tags"}, p.catalogueController.Search, access.SystemSettingsGeneralView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/catalogue", []string{"context", "body"}, nil, p.catalogueController.Create, access.SystemSettingsGeneralManager), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/catalogue", []string{"context", "query:catalogue", "body"}, nil, p.catalogueController.Edit, access.SystemSettingsGeneralManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/catalogue", []string{"context", "query:catalogue"}, nil, p.catalogueController.Delete, access.SystemSettingsGeneralManager), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/catalogue/sort", []string{"context", "body"}, nil, p.catalogueController.Sort, access.SystemSettingsGeneralManager), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/catalogue/services", []string{"context", "query:keyword"}, []string{"services"}, p.catalogueController.Services, access.SystemApiPortalApiPortalView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/catalogue/service", []string{"context", "query:service"}, []string{"service"}, p.catalogueController.ServiceDetail, access.SystemApiPortalApiPortalView), pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/catalogue/service/subscribe", []string{"context", "body"}, nil, p.catalogueController.Subscribe), } } diff --git a/plugins/core/team-manager.go b/plugins/core/team-manager.go index 7c03c9d2..f13d8e3a 100644 --- a/plugins/core/team-manager.go +++ b/plugins/core/team-manager.go @@ -1,16 +1,19 @@ package core import ( - "github.com/eolinker/go-common/pm3" "net/http" + + "github.com/APIParkLab/APIPark/resources/access" + + "github.com/eolinker/go-common/pm3" ) func (p *plugin) TeamManagerApi() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/manager/team", []string{"context", "query:id"}, []string{"team"}, p.teamManagerController.GetTeam), - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/manager/teams", []string{"context", "query:keyword"}, []string{"teams"}, p.teamManagerController.Search), - pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/manager/team", []string{"context", "body"}, []string{"team"}, p.teamManagerController.CreateTeam), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/manager/team", []string{"context", "query:id", "body"}, []string{"team"}, p.teamManagerController.EditTeam), - pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/manager/team", []string{"context", "query:id"}, []string{"id"}, p.teamManagerController.DeleteTeam), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/manager/team", []string{"context", "query:id"}, []string{"team"}, p.teamManagerController.GetTeam, access.SystemWorkspaceTeamViewAll, access.TeamTeamTeamView), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/manager/teams", []string{"context", "query:keyword"}, []string{"teams"}, p.teamManagerController.Search, access.SystemWorkspaceTeamViewAll, access.TeamTeamTeamView), + pm3.CreateApiWidthDoc(http.MethodPost, "/api/v1/manager/team", []string{"context", "body"}, []string{"team"}, p.teamManagerController.CreateTeam, access.SystemWorkspaceTeamCreate, access.TeamTeamTeamManager), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/manager/team", []string{"context", "query:id", "body"}, []string{"team"}, p.teamManagerController.EditTeam, access.SystemWorkspaceTeamManager, access.TeamTeamTeamManager), + pm3.CreateApiWidthDoc(http.MethodDelete, "/api/v1/manager/team", []string{"context", "query:id"}, []string{"id"}, p.teamManagerController.DeleteTeam, access.SystemWorkspaceTeamManager, access.TeamTeamTeamManager), } } diff --git a/plugins/core/upstream.go b/plugins/core/upstream.go index af77a869..52e1a173 100644 --- a/plugins/core/upstream.go +++ b/plugins/core/upstream.go @@ -3,12 +3,13 @@ package core import ( "net/http" + "github.com/APIParkLab/APIPark/resources/access" "github.com/eolinker/go-common/pm3" ) func (p *plugin) upstreamApis() []pm3.Api { return []pm3.Api{ - pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/upstream", []string{"context", "query:service"}, []string{"upstream"}, p.upstreamController.Get), - pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/upstream", []string{"context", "query:service", "body"}, []string{"upstream"}, p.upstreamController.Save), + pm3.CreateApiWidthDoc(http.MethodGet, "/api/v1/service/upstream", []string{"context", "query:service"}, []string{"upstream"}, p.upstreamController.Get, access.SystemWorkspaceServiceViewAll, access.TeamServiceUpstreamView), + pm3.CreateApiWidthDoc(http.MethodPut, "/api/v1/service/upstream", []string{"context", "query:service", "body"}, []string{"upstream"}, p.upstreamController.Save, access.SystemWorkspaceServiceManagerAll, access.TeamServiceUpstreamManager), } } diff --git a/resources/access/access.go b/resources/access/access.go index 25c38843..3f3db62f 100644 --- a/resources/access/access.go +++ b/resources/access/access.go @@ -3,8 +3,9 @@ package access import ( _ "embed" + yaml "gopkg.in/yaml.v3" + "github.com/eolinker/go-common/access" - "gopkg.in/yaml.v3" ) type Access = access.Access @@ -24,22 +25,61 @@ func init() { access.Add(group, asl) } - //defaultRoles := access.Roles() - //for group, rs := range defaultRoles { - // p, has := access.GetPermit(group) - // if !has { - // continue - // } - // - // for _, r := range rs { - // for _, pm := range r.Permits { - // apis, err := p.GetPermits(pm) - // if err != nil { - // continue - // } - // permit.AddPermitRule(pm, apis...) - // } - // } - // - //} } + +const ( + SystemAnalysisRunViewView = "system.analysis.run_view.view" + SystemApiPortalApiPortalView = "system.api_portal.api_portal.view" + SystemSettingsAccountManager = "system.settings.account.manager" + SystemSettingsAccountView = "system.settings.account.view" + SystemSettingsAiProviderManager = "system.settings.ai_provider.manager" + SystemSettingsAiProviderView = "system.settings.ai_provider.view" + SystemSettingsApiGatewayManager = "system.settings.api_gateway.manager" + SystemSettingsApiGatewayView = "system.settings.api_gateway.view" + SystemSettingsDataSourceManager = "system.settings.data_source.manager" + SystemSettingsDataSourceView = "system.settings.data_source.view" + SystemSettingsGeneralManager = "system.settings.general.manager" + SystemSettingsGeneralView = "system.settings.general.view" + SystemSettingsLogConfigurationManager = "system.settings.log_configuration.manager" + SystemSettingsLogConfigurationView = "system.settings.log_configuration.view" + SystemSettingsRoleView = "system.settings.role.view" + SystemSettingsSslCertificateManager = "system.settings.ssl_certificate.manager" + SystemSettingsSslCertificateView = "system.settings.ssl_certificate.view" + SystemWorkspaceApplicationManagerAll = "system.workspace.application.manager_all" + SystemWorkspaceApplicationViewAll = "system.workspace.application.view_all" + SystemWorkspaceServiceManagerAll = "system.workspace.service.manager_all" + SystemWorkspaceServiceViewAll = "system.workspace.service.view_all" + SystemWorkspaceTeamCreate = "system.workspace.team.create" + SystemWorkspaceTeamManager = "system.workspace.team.manager" + SystemWorkspaceTeamViewAll = "system.workspace.team.view_all" +) + +const ( + TeamConsumerApplicationManager = "team.consumer.application.manager" + TeamConsumerAuthorizationManager = "team.consumer.authorization.manager" + TeamConsumerAuthorizationView = "team.consumer.authorization.view" + TeamConsumerSubscriptionManagerSubscribed = "team.consumer.subscription.manager_subscribed_services" + TeamConsumerSubscriptionSubscribe = "team.consumer.subscription.subscribe" + TeamConsumerSubscriptionViewSubscribed = "team.consumer.subscription.view_subscribed_service" + TeamServiceApiManager = "team.service.api.manager" + TeamServiceApiView = "team.service.api.view" + TeamServiceApiDocManager = "team.service.api_doc.manager" + TeamServiceApiDocView = "team.service.api_doc.view" + TeamServiceReleaseManager = "team.service.release.manager" + TeamServiceReleaseView = "team.service.release.view" + TeamServiceServiceManager = "team.service.service.manager" + TeamServiceServiceIntroManager = "team.service.service_intro.manager" + TeamServiceServiceIntroView = "team.service.service_intro.view" + TeamServiceSubscriptionManager = "team.service.subscription.manager" + TeamServiceSubscriptionView = "team.service.subscription.view" + TeamServiceUpstreamManager = "team.service.upstream.manager" + TeamServiceUpstreamView = "team.service.upstream.view" + TeamTeamConsumerManager = "team.team.consumer.manager" + TeamTeamConsumerView = "team.team.consumer.view" + TeamTeamMemberManager = "team.team.member.manager" + TeamTeamMemberView = "team.team.member.view" + TeamTeamServiceManager = "team.team.service.manager" + TeamTeamServiceView = "team.team.service.view" + TeamTeamTeamManager = "team.team.team.manager" + TeamTeamTeamView = "team.team.team.view" +) diff --git a/resources/access/access.yaml b/resources/access/access.yaml index 4008e5e1..9a907fcd 100644 --- a/resources/access/access.yaml +++ b/resources/access/access.yaml @@ -71,19 +71,6 @@ system: guest_allow: true - name: manager value: 'manager' - apis: - - "POST:/api/v1/user/account" - - "PUT:/api/v1/user/account" - - "DELETE:/api/v1/user/account" - - "POST:/api/v1/user/account/enable" - - "POST:/api/v1/user/account/disable" - - "POST:/api/v1/user/department" - - "PUT:/api/v1/user/department" - - "DELETE:/api/v1/user/department" - - "POST:/api/v1/user/department/member" - - "DELETE:/api/v1/user/department/member" - - "POST:/api/v1/user/department/member/remove" - - "POST:/api/v1/account/role" dependents: - system.settings.account.view - name: role @@ -92,11 +79,6 @@ system: - name: view guest_allow: true value: 'view' - apis: - - "GET:/api/v1/system/roles" - - "GET:/api/v1/system/role" - - "GET:/api/v1/team/roles" - - "GET:/api/v1/team/role" - name: api gateway value: 'api_gateway' children: @@ -104,27 +86,18 @@ system: cname: 查看 value: 'view' guest_allow: true - apis: - - "GET:/api/v1/cluster/nodes" - name: manager value: 'manager' - apis: - - "PUT:/api/v1/cluster/reset" - - "POST:/api/v1/cluster/check" + dependents: + - system.settings.api_gateway.view - name: ai provider value: 'ai_provider' children: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/ai/providers" - - "GET:/api/v1/ai/provider/config" - name: manager value: 'manager' - apis: - - "PUT:/api/v1/ai/provider/config" - - "PUT:/api/v1/ai/provider/default-llm" dependents: - system.settings.ai_provider.view - name: ssl certificate @@ -134,15 +107,8 @@ system: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/certificates" - - "GET:/api/v1/certificate" - name: manager value: 'manager' - apis: - - "POST:/api/v1/certificate" - - "PUT:/api/v1/certificate" - - "DELETE:/api/v1/certificate" dependents: - system.settings.ssl_certificate.view - name: data source @@ -151,13 +117,8 @@ system: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/monitor/config" - name: manager value: 'manager' - apis: - - "POST:/api/v1/monitor/config" - - "PUT:/api/v1/monitor/config" dependents: - system.settings.data_source.view - name: log configuration @@ -166,18 +127,8 @@ system: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/dynamic/{name}/info" - - "GET:/api/v1/dynamic/{name}/list" - - "GET:/api/v1/dynamic/{name}/render" - name: manager value: 'manager' - apis: - - "POST:/api/v1/dynamic/{name}" - - "PUT:/api/v1/dynamic/{name}/config" - - "DELETE:/api/v1/dynamic/{name}/batch" - - "PUT:/api/v1/dynamic/{name}/online" - - "PUT:/api/v1/dynamic/{name}/offline" dependents: - system.settings.log_configuration.view team: @@ -190,17 +141,8 @@ team: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/service/routers" - - "GET:/api/v1/service/router/detail" - - "GET:/api/v1/service/router/detail/simple" - - "GET:/api/v1/service/router/define" - name: manager value: 'manager' - apis: - - "POST:/api/v1/service/router" - - "PUT:/api/v1/service/router" - - "DELETE:/api/v1/service/router" dependents: - team.service.api.view - name: api doc @@ -210,13 +152,8 @@ team: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/service/api_doc" - name: manager value: 'manager' - apis: - - "PUT:/api/v1/service/api_doc" - - "POST:/api/v1/service/api_doc/upload" dependents: - team.service.api_doc.view - name: service intro @@ -236,12 +173,8 @@ team: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/service/upstream" - name: manager value: 'manager' - apis: - - "PUT:/api/v1/service/upstream" dependents: - team.service.upstream.view - name: release @@ -250,18 +183,8 @@ team: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/service/releases" - - "GET:/api/v1/service/release" - - "GET:/api/v1/service/publishs" - - "GET:/api/v1/service/publish/check" - - "GET:/api/v1/service/release/preview" - - "GET:/api/v1/service/publish/status" - name: manager value: 'manager' - apis: - - "POST:/api/v1/service/publish/release/do" - - "DELETE:/api/v1/service/release" dependents: - team.service.release.view - name: subscription review @@ -270,16 +193,8 @@ team: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/service/approval/subscribes" - - "GET:/api/v1/service/approval/subscribe" - - "GET:/api/v1/service/subscribers" - name: manager value: 'manager' - apis: - - "POST:/api/v1/service/approval/subscribe" - - "POST:/api/v1/service/subscriber" - - "DELETE:/api/v1/service/subscriber" dependents: - team.service.subscription.view - name: service @@ -287,10 +202,6 @@ team: children: - name: manager value: 'manager' - apis: - - "PUT:/api/v1/service/info" - - "POST:/api/v1/team/service" - - "DELETE:/api/v1/team/service" dependents: - team.service.service.manager - name: consumer @@ -305,38 +216,25 @@ team: - name: view subscribed services value: 'view_subscribed_service' guest_allow: true - apis: - - "GET:/api/v1/application/subscription" - name: manager subscribed services value: 'manager_subscribed_services' - apis: - - "POST:/api/v1/catalogue/service/subscribe" - - "POST:/api/v1/application/subscription/cancel" - - "POST:/api/v1/application/subscription/cancel_apply" + dependents: + - team.consumer.subscription.manager_subscribed_services - name: authorization value: 'authorization' children: - name: view value: 'view' guest_allow: true - apis: - - "GET:/api/v1/app/authorization" - - "GET:/api/v1/app/authorizations" - - "GET:/api/v1/app/authorization/details" - name: manager value: 'manager' - apis: - - "POST:/api/v1/app/authorization" - - "PUT:/api/v1/app/authorization" - - "DELETE:/api/v1/app/authorization" + dependents: + - team.consumer.authorization.view - name: consumer value: 'application' children: - name: manager value: 'manager' - apis: - - "PUT:/api/v1/app/info" - - "POST:/api/v1/team/app" - name: team value: 'team' children: diff --git a/resources/locale/locale.go b/resources/locale/locale.go index 7b75955b..bf31dd50 100644 --- a/resources/locale/locale.go +++ b/resources/locale/locale.go @@ -5,18 +5,15 @@ import ( "encoding/json" "strings" - "github.com/eolinker/eosc" + "github.com/eolinker/go-common/pm3" ) var ( //go:embed i18n/* - i18nDirs embed.FS - i18nData eosc.Untyped[string, map[string]string] - defaultI18n = "zh-CN" + i18nDirs embed.FS ) func init() { - i18nData = eosc.BuildUntyped[string, map[string]string]() files, err := i18nDirs.ReadDir("i18n") if err != nil { panic(err) @@ -34,19 +31,6 @@ func init() { panic(err) } key := strings.TrimSuffix(f.Name(), ".json") - i18nData.Set(key, tmp) + pm3.I18nRegister(key, tmp) } } - -func Get(i18n string) map[string]string { - result, has := i18nData.Get(i18n) - if has { - return result - } - - result, has = i18nData.Get(defaultI18n) - if !has { - return make(map[string]string) - } - return result -} diff --git a/scripts/docker-compose.yml b/scripts/docker-compose.yml new file mode 100644 index 00000000..4292efea --- /dev/null +++ b/scripts/docker-compose.yml @@ -0,0 +1,95 @@ +version: '3' +services: + apipark-mysql: + image: mysql:8.0.37 + privileged: true + restart: always + container_name: apipark-mysql + hostname: apipark-mysql + command: + - "--character-set-server=utf8mb4" + - "--collation-server=utf8mb4_unicode_ci" + ports: + - "33306:3306" + environment: + - MYSQL_ROOT_PASSWORD=123456 + - MYSQL_DATABASE=apipark + volumes: + - /var/lib/apipark/mysql:/var/lib/mysql + networks: + - apipark + apipark: + image: apipark/apipark:v1.2.0-beta + container_name: apipark + privileged: true + restart: always + networks: + - apipark + ports: + - "18288:8288" + depends_on: + - apipark-mysql + environment: + - MYSQL_USER_NAME=root + - MYSQL_PWD=123456 + - MYSQL_IP=apipark-mysql + - MYSQL_PORT=3306 #mysql端口 + - MYSQL_DB="apipark" + - ERROR_DIR=work/logs # 日志放置目录 + - ERROR_FILE_NAME=error.log # 错误日志文件名 + - ERROR_LOG_LEVEL=info # 错误日志等级,可选:panic,fatal,error,warning,info,debug,trace 不填或者非法则为info + - ERROR_EXPIRE=7d # 错误日志过期时间,默认单位为天,d|天,h|小时, 不合法配置默认为7d + - ERROR_PERIOD=day # 错误日志切割周期,仅支持day、hour + - REDIS_ADDR=apipark-redis:6379 #Redis集群地址 多个用,隔开 + - REDIS_PWD=123456 # Redis密码 + - ADMIN_PASSWORD=12345678 + influxdb2: + image: influxdb:2.6 + privileged: true + restart: always + container_name: influxdb2 + hostname: influxdb2 + ports: + - "8086:8086" + volumes: + - /var/lib/apipark/influxdb2:/var/lib/influxdb2 + networks: + - apipark + apipark-redis: + container_name: apipark-redis + image: redis:7.2.4 + hostname: apipark-redis + privileged: true + restart: always + ports: + - 6379:6379 + command: + - bash + - -c + - "redis-server --protected-mode yes --logfile redis.log --appendonly no --port 6379 --requirepass 123456" + networks: + - apipark + apipark-apinto: + image: eolinker/apinto-gateway + container_name: apipark-apinto + privileged: true + restart: always + command: + - ./start.sh + ports: + - "8099:8099" + - "9400:9400" + - "9401:9401" + volumes: + - /var/lib/apipark/apinto/data:/var/lib/apinto + - /var/lib/apipark/apinto/log:/var/log/apinto + - ${PWD}/config.yml:/etc/apinto/config.yml + networks: + - apipark +networks: + apipark: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.100.0.0/24