docs(annex): add normative Operation-to-RIGHT mapping#586
Conversation
Add a new annex that defines, for every AAS HTTP/REST API operation, the RIGHT (per IDTA-01004 rightsEnum) an access-rule enforcement point MUST use. The table covers: - AAS Repository and AAS Service operations (shells, submodels, submodel elements, attachments, operation invocation), - Concept Description Repository operations, - Registry operations (shell- and submodel-descriptors), - Discovery operations (/lookup/shells), - /description and /query. For PUT on client-addressable resources, the required RIGHT is listed as "CREATE or UPDATE" and the enforcement point resolves the right at request time based on existence. Also register the new annex in nav.adoc. Refs: Review Finding T-10 Made-with: Cursor
There was a problem hiding this comment.
QDJVMC found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
| | DeleteSubmodelById | DELETE | /submodels/{submodelIdentifier} | DELETE | "/submodels/*" | ||
|
|
||
| | GetAllSubmodelElements | GET | /submodels/{submodelIdentifier}/submodel-elements | READ | "/submodels/*/submodel-elements" | ||
| | GetSubmodelElementByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | READ | "/submodels/*/submodel-elements/*" |
There was a problem hiding this comment.
the two "*" are not displayed in html
| | GetSubmodelElementByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | READ | "/submodels/*/submodel-elements/*" | |
| | GetSubmodelElementByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | READ | "/submodels/\*/submodel-elements/*" |
There was a problem hiding this comment.
better in general to use code formatting and not text
| | GetAllSubmodelElements | GET | /submodels/{submodelIdentifier}/submodel-elements | READ | "/submodels/*/submodel-elements" | ||
| | GetSubmodelElementByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | READ | "/submodels/*/submodel-elements/*" | ||
| | PostSubmodelElementByPath | POST | /submodels/{submodelIdentifier}/submodel-elements | CREATE | "/submodels/*/submodel-elements" | ||
| | PutSubmodelElementByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | CREATE or UPDATE | "/submodels/*/submodel-elements/*" |
There was a problem hiding this comment.
| | PutSubmodelElementByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | CREATE or UPDATE | "/submodels/*/submodel-elements/*" | |
| | PutSubmodelElementByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | CREATE or UPDATE | "/submodels/\*/submodel-elements/*" |
| | GetSubmodelElementByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | READ | "/submodels/*/submodel-elements/*" | ||
| | PostSubmodelElementByPath | POST | /submodels/{submodelIdentifier}/submodel-elements | CREATE | "/submodels/*/submodel-elements" | ||
| | PutSubmodelElementByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | CREATE or UPDATE | "/submodels/*/submodel-elements/*" | ||
| | PatchSubmodelElementByPath | PATCH | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | UPDATE | "/submodels/*/submodel-elements/*" |
There was a problem hiding this comment.
| | PatchSubmodelElementByPath | PATCH | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | UPDATE | "/submodels/*/submodel-elements/*" | |
| | PatchSubmodelElementByPath | PATCH | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | UPDATE | "/submodels/\*/submodel-elements/*" |
| | PostSubmodelElementByPath | POST | /submodels/{submodelIdentifier}/submodel-elements | CREATE | "/submodels/*/submodel-elements" | ||
| | PutSubmodelElementByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | CREATE or UPDATE | "/submodels/*/submodel-elements/*" | ||
| | PatchSubmodelElementByPath | PATCH | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | UPDATE | "/submodels/*/submodel-elements/*" | ||
| | DeleteSubmodelElementByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | DELETE | "/submodels/*/submodel-elements/*" |
There was a problem hiding this comment.
| | DeleteSubmodelElementByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | DELETE | "/submodels/*/submodel-elements/*" | |
| | DeleteSubmodelElementByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | DELETE | "/submodels/\*/submodel-elements/*" |
| | PutSubmodelElementByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | CREATE or UPDATE | "/submodels/*/submodel-elements/*" | ||
| | PatchSubmodelElementByPath | PATCH | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | UPDATE | "/submodels/*/submodel-elements/*" | ||
| | DeleteSubmodelElementByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | DELETE | "/submodels/*/submodel-elements/*" | ||
| | InvokeOperation | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke | EXECUTE | "/submodels/*/submodel-elements/*/invoke" |
There was a problem hiding this comment.
| | InvokeOperation | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke | EXECUTE | "/submodels/*/submodel-elements/*/invoke" | |
| | InvokeOperation | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke | EXECUTE | "/submodels/\*/submodel-elements/*/invoke" |
| | PatchSubmodelElementByPath | PATCH | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | UPDATE | "/submodels/*/submodel-elements/*" | ||
| | DeleteSubmodelElementByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | DELETE | "/submodels/*/submodel-elements/*" | ||
| | InvokeOperation | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke | EXECUTE | "/submodels/*/submodel-elements/*/invoke" | ||
| | InvokeOperationAsync | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke-async | EXECUTE | "/submodels/*/submodel-elements/*/invoke-async" |
There was a problem hiding this comment.
| | InvokeOperationAsync | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke-async | EXECUTE | "/submodels/*/submodel-elements/*/invoke-async" | |
| | InvokeOperationAsync | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke-async | EXECUTE | "/submodels/\*/submodel-elements/*/invoke-async" |
| | DeleteSubmodelElementByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath} | DELETE | "/submodels/*/submodel-elements/*" | ||
| | InvokeOperation | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke | EXECUTE | "/submodels/*/submodel-elements/*/invoke" | ||
| | InvokeOperationAsync | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke-async | EXECUTE | "/submodels/*/submodel-elements/*/invoke-async" | ||
| | GetOperationAsyncStatus | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/operation-status/{handleId} | READ | "/submodels/*/submodel-elements/*/operation-status/*" |
There was a problem hiding this comment.
| | GetOperationAsyncStatus | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/operation-status/{handleId} | READ | "/submodels/*/submodel-elements/*/operation-status/*" | |
| | GetOperationAsyncStatus | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/operation-status/{handleId} | READ | "/submodels/\*/submodel-elements/*/operation-status/*" |
| | InvokeOperation | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke | EXECUTE | "/submodels/*/submodel-elements/*/invoke" | ||
| | InvokeOperationAsync | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke-async | EXECUTE | "/submodels/*/submodel-elements/*/invoke-async" | ||
| | GetOperationAsyncStatus | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/operation-status/{handleId} | READ | "/submodels/*/submodel-elements/*/operation-status/*" | ||
| | GetFileByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | READ | "/submodels/*/submodel-elements/*/attachment" |
There was a problem hiding this comment.
| | GetFileByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | READ | "/submodels/*/submodel-elements/*/attachment" | |
| | GetFileByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | READ | "/submodels/\*/submodel-elements/*/attachment" |
| | InvokeOperationAsync | POST | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/invoke-async | EXECUTE | "/submodels/*/submodel-elements/*/invoke-async" | ||
| | GetOperationAsyncStatus | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/operation-status/{handleId} | READ | "/submodels/*/submodel-elements/*/operation-status/*" | ||
| | GetFileByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | READ | "/submodels/*/submodel-elements/*/attachment" | ||
| | PutFileByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | UPDATE | "/submodels/*/submodel-elements/*/attachment" |
There was a problem hiding this comment.
| | PutFileByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | UPDATE | "/submodels/*/submodel-elements/*/attachment" | |
| | PutFileByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | UPDATE | "/submodels/\*/submodel-elements/*/attachment" |
| | GetOperationAsyncStatus | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/operation-status/{handleId} | READ | "/submodels/*/submodel-elements/*/operation-status/*" | ||
| | GetFileByPath | GET | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | READ | "/submodels/*/submodel-elements/*/attachment" | ||
| | PutFileByPath | PUT | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | UPDATE | "/submodels/*/submodel-elements/*/attachment" | ||
| | DeleteFileByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | DELETE | "/submodels/*/submodel-elements/*/attachment" |
There was a problem hiding this comment.
| | DeleteFileByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | DELETE | "/submodels/*/submodel-elements/*/attachment" | |
| | DeleteFileByPath | DELETE | /submodels/{submodelIdentifier}/submodel-elements/{idShortPath}/attachment | DELETE | "/submodels/\*/submodel-elements/*/attachment" |
BirgitBoss
left a comment
There was a problem hiding this comment.
approve but check for correct html representation of the examples with severl "*" in the path
Summary
Add a normative annex "Operation to RIGHT Mapping" that binds every AAS HTTP/REST API operation to a RIGHT value from IDTA-01004's
rightsEnum, together with a compatible ROUTE literal example.Problem
IDTA-01004 provides an indicative mapping from RIGHTS to HTTP methods, but the per-operation mapping (operationId -> RIGHT) is not defined in either spec. Enforcement points therefore make inconsistent choices, in particular for:
Solution
Add
pages/annex/operation-to-right-mapping.adocwith a normative table covering Shell, Submodel, SubmodelElement, attachment, ConceptDescription, Descriptor (AAS / Submodel Registry), Discovery, Description and Query operations. Register the annex innav.adoc.Affected files
documentation/IDTA-01002-3/modules/ROOT/pages/annex/operation-to-right-mapping.adoc(new)documentation/IDTA-01002-3/modules/ROOT/nav.adocReview notes
admin-shell-io/aas-specs-security#...references this annex from the Rights-and-operation-verbs section.Refs: Review Finding T-10