Read workspace role schema
Motivation
Return the schema of the resources, available to specified role in a given workspace.
Functional Design
GET /api/v2/apps/{owner}/{app}/schemas/{pkg}.{workspace}/roles/{pkg}.{role}
If non-published role is specified, the user must have sys.Developer
role in the workspace to see the schema.
Headers
Authorization
Bearer {PrincipalToken}
optional
Accept
application/json
To get the response in OpenAPI format (default)
Accept
text/html
Shows schema in Swagger UI
Parameters
owner
string
name of a user who owns the application
app
string
name of an application
pkg.workspace
string
identifies a workspace
pkg.role
string
identifies a published role
Result
200
OK
role schema in the selected format
Technical Design
WorkspaceQName and QName of the role are provided to QPv2 in QueryMessage
QPv2 reads the schema of the resources available to the role and generates OpenAPI schema for this role
Components
pkg/appdef/acl
New function PublishedTypes
~cmp.publishedTypes~
✅
/*
PublishedTypes lists the resources allowed to the published role in the workspace and ancestors (including resources available to non-authenticated requests):
- Documents
- Views
- Commands
- Queries
When fieldNames is empty, it means all fields are allowed
*/
func PublishedTypes(ws appdef.IWorkspace, role appdef.QName) iter.Seq2[appdef.IType,
iter.Seq2[appdef.OperationKind, *[]appdef.FieldName]] {
…
}
Usage:
import "github.com/voedger/voedger/pkg/appdef/acl"
for t, ops := range acl.PublishedTypes(ws, role) {
for op, fields := range ops {
if fields == nil {
fmt.Println(t, op, "all fields")
} else {
fmt.Println(t, op, *fields...)
}
}
}
pkg/processors/query2
1. IApiPathHandler
implementation for handling ApiPath_Schemas_WorkspaceRole
~cmp.schemasRoleHandler~
✅
2. newQueryProcessorPipeline
: provide API handler for ApiPath_Schemas_WorkspaceRole
~cmp.provideSchemasRoleHandler~
✅
3. New function CreateOpenApiSchema
type SchemaMeta struct {
schemaTitle string
schemaVerstion string
}
type PublishedTypesFunc func(ws appdef.IWorkspace, role appdef.QName) iter.Seq2[appdef.IType,
iter.Seq2[appdef.OperationKind, *[]appdef.FieldName]]
func CreateOpenApiSchema(writer io.Wrter, ws appdef.IWorkspace, role appdef.QName,
pubTypesFunc PublishedTypesFunc, meta SchemaMeta) error
~cmp.CreateOpenApiSchema~
✅
4. pkg/sys/it
integration test ~it.TestQueryProcessor2_SchemasRole~
✅
See Also
Last updated
Was this helpful?