|
80 | 80 | } |
81 | 81 | }, |
82 | 82 | "schemas": { |
83 | | - "ContainerSearchResult": { |
84 | | - "properties": { |
85 | | - "containerId": { |
86 | | - "description": "Globally unique user-friendly identifier.", |
87 | | - "example": "my-container-N7jXQY1", |
88 | | - "type": "string" |
89 | | - }, |
90 | | - "containerType": { |
91 | | - "description": "Resource container type.", |
92 | | - "enum": [ |
93 | | - "PROJECT", |
94 | | - "FOLDER" |
95 | | - ], |
96 | | - "type": "string" |
97 | | - }, |
98 | | - "id": { |
99 | | - "description": "Globally unique identifier.", |
100 | | - "example": "4d8c80b4-ded9-44cf-81ac-4fc5a2f7fc87", |
101 | | - "format": "uuid", |
102 | | - "type": "string" |
103 | | - }, |
104 | | - "lifecycleState": { |
105 | | - "$ref": "#/components/schemas/LifecycleState" |
106 | | - }, |
107 | | - "name": { |
108 | | - "description": "Resource container name.", |
109 | | - "example": "My Container", |
110 | | - "type": "string" |
111 | | - }, |
112 | | - "organizationId": { |
113 | | - "description": "Id of the organization the container is in.", |
114 | | - "example": "9d8c89b4-aed9-44cf-81dc-4fc5a2f7fc32", |
115 | | - "format": "uuid", |
116 | | - "type": "string" |
117 | | - } |
118 | | - }, |
119 | | - "required": [ |
120 | | - "containerId", |
121 | | - "id", |
122 | | - "name", |
123 | | - "containerType" |
124 | | - ], |
125 | | - "type": "object" |
126 | | - }, |
127 | 83 | "CreateFolderPayload": { |
128 | 84 | "properties": { |
129 | 85 | "containerParentId": { |
|
866 | 822 | "paths": { |
867 | 823 | "/v2/folders": { |
868 | 824 | "get": { |
869 | | - "description": "Returns all folders and their metadata that: \n- Are children of the specific containerParentId\n- Match the given containerIds\n- User is member of \u003cbr /\u003e\n\nFilter:\n- Either containerParentId OR containerIds OR member must be passed\n- If containerId and containerParentId are given, both are used for filtering - containers must point to the same parent\n- If member and containerParentId are given, both are used for filtering\n- If member is given, containers must not point to the same container parent\n", |
| 825 | + "description": "Returns all folders and their metadata that: \n- Are children of the specific containerParentId\n- Match the given containerIds\n- User is member of \u003cbr /\u003e\n\nFilter:\n- Either containerParentId OR containerIds OR member must be passed\n- If containerId and containerParentId are given, both are used for filtering - containers must point to the same parent\n- If member and containerParentId are given, both are used for filtering\n- If member is given, containers must not point to the same container parent\n\nAuthorization \u0026 Permissions:\n- When filtering by member: resource-manager.folder.direct.get is evaluated on target folders for the member; if caller differs from target member, system-level resource-manager.folder.get is required.\n- When filtering by containerParentId: resource-manager.folder.list is evaluated on the parent container.\n- When filtering by containerIds: resource-manager.folder.get is evaluated on the parent container of requested folders.\n", |
870 | 826 | "operationId": "ListFolders", |
871 | 827 | "parameters": [ |
872 | 828 | { |
|
962 | 918 | "x-stackit-authorization": { |
963 | 919 | "disabled": true, |
964 | 920 | "implicit-actions": [ |
965 | | - "resource-manager.folder.list" |
| 921 | + "resource-manager.folder.direct.get", |
| 922 | + "resource-manager.folder.list", |
| 923 | + "resource-manager.folder.get" |
966 | 924 | ] |
967 | 925 | } |
968 | 926 | }, |
969 | 927 | "post": { |
970 | | - "description": "Create a new folder.", |
| 928 | + "description": "Creates a new folder within a parent organization or folder.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Parent Container: resource-manager.folder.create (required permission on the target parent organization or folder to create a folder).", |
971 | 929 | "operationId": "CreateFolder", |
972 | 930 | "requestBody": { |
973 | 931 | "content": { |
|
1046 | 1004 | }, |
1047 | 1005 | "/v2/folders/{containerId}": { |
1048 | 1006 | "delete": { |
1049 | | - "description": "Delete a folder and its metadata.\n- Folder must not be parent of any other container\n- A force flag may be set, deleting all underlying folders recursively - if no project is attached!", |
| 1007 | + "description": "Delete a folder and its metadata.\n- Folder must not contain active child containers unless force deletion is enabled without attached projects.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Folder: resource-manager.folder.delete (required permission on the target folder to delete it).", |
1050 | 1008 | "operationId": "DeleteFolder", |
1051 | 1009 | "parameters": [ |
1052 | 1010 | { |
|
1096 | 1054 | }, |
1097 | 1055 | "summary": "Delete Folder", |
1098 | 1056 | "x-stackit-authorization": { |
1099 | | - "actions": [ |
| 1057 | + "disabled": true, |
| 1058 | + "implicit-actions": [ |
1100 | 1059 | "resource-manager.folder.delete" |
1101 | | - ], |
1102 | | - "resource-id": "containerId", |
1103 | | - "resource-id-type": "dynamic", |
1104 | | - "resource-type": "folder" |
| 1060 | + ] |
1105 | 1061 | } |
1106 | 1062 | }, |
1107 | 1063 | "get": { |
1108 | | - "description": "Returns all metadata for a specific folder.", |
| 1064 | + "description": "Returns metadata for a specific folder.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Folder: resource-manager.folder.get (required primary permission to retrieve folder details).\n- Evaluated on Parent Containers: resource-manager.organization.get and resource-manager.folder.get implicitly to resolve parent hierarchy details.", |
1109 | 1065 | "operationId": "GetFolderDetails", |
1110 | 1066 | "parameters": [ |
1111 | 1067 | { |
|
1161 | 1117 | }, |
1162 | 1118 | "summary": "Get Folder Details", |
1163 | 1119 | "x-stackit-authorization": { |
1164 | | - "actions": [ |
| 1120 | + "disabled": true, |
| 1121 | + "implicit-actions": [ |
| 1122 | + "resource-manager.organization.get", |
1165 | 1123 | "resource-manager.folder.get" |
1166 | | - ], |
1167 | | - "resource-id": "containerId", |
1168 | | - "resource-id-type": "dynamic", |
1169 | | - "resource-type": "folder" |
| 1124 | + ] |
1170 | 1125 | } |
1171 | 1126 | }, |
1172 | 1127 | "parameters": [ |
|
1181 | 1136 | } |
1182 | 1137 | ], |
1183 | 1138 | "patch": { |
1184 | | - "description": "Update the folder and its metadata.\n- Update folder name\n- Update folder labels\n- Update folder parent (folder or organization)", |
| 1139 | + "description": "Update the folder and its metadata (name, labels, parent container).\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Folder: resource-manager.folder.edit (required permission on the target folder to modify its details, labels, or parent).", |
1185 | 1140 | "operationId": "PartialUpdateFolder", |
1186 | 1141 | "requestBody": { |
1187 | 1142 | "content": { |
|
1251 | 1206 | }, |
1252 | 1207 | "summary": "Update Folder", |
1253 | 1208 | "x-stackit-authorization": { |
1254 | | - "actions": [ |
| 1209 | + "disabled": true, |
| 1210 | + "implicit-actions": [ |
1255 | 1211 | "resource-manager.folder.edit" |
1256 | | - ], |
1257 | | - "resource-id": "containerId", |
1258 | | - "resource-id-type": "dynamic", |
1259 | | - "resource-type": "folder" |
| 1212 | + ] |
1260 | 1213 | } |
1261 | 1214 | } |
1262 | 1215 | }, |
1263 | 1216 | "/v2/folders/{containerId}/labels": { |
1264 | 1217 | "delete": { |
1265 | | - "description": "Deletes all folder labels by given keys.\n- Specific labels may be deleted by key(s)\n- If no key is specified, all labels will be deleted!", |
| 1218 | + "description": "Deletes folder labels by specified keys, or removes all labels if no key is provided.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Folder: resource-manager.folder.edit (required permission on the target folder to delete its labels).", |
1266 | 1219 | "operationId": "DeleteFolderLabels", |
1267 | 1220 | "parameters": [ |
1268 | 1221 | { |
|
1299 | 1252 | }, |
1300 | 1253 | "summary": "Delete Folder Labels", |
1301 | 1254 | "x-stackit-authorization": { |
1302 | | - "actions": [ |
| 1255 | + "disabled": true, |
| 1256 | + "implicit-actions": [ |
1303 | 1257 | "resource-manager.folder.edit" |
1304 | | - ], |
1305 | | - "resource-id": "containerId", |
1306 | | - "resource-id-type": "dynamic", |
1307 | | - "resource-type": "folder" |
| 1258 | + ] |
1308 | 1259 | } |
1309 | 1260 | }, |
1310 | 1261 | "parameters": [ |
|
1321 | 1272 | }, |
1322 | 1273 | "/v2/organizations": { |
1323 | 1274 | "get": { |
1324 | | - "description": "Returns all organizations and their metadata.\n- If no containerIds are specified, all organizations are returned, if permitted\n- ContainerIds may be set to filter\n- Member may be set to filter\n- If member and containerIds are given, both are used for filtering\n", |
| 1275 | + "description": "Returns all organizations and their metadata accessible to the caller.\n- Filterable by containerIds or member.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Organizations: resource-manager.organization.list and/or (depending if containerIDs was used in the request) resource-manager.organization.get to filter and list accessible organizations.", |
1325 | 1276 | "operationId": "ListOrganizations", |
1326 | 1277 | "parameters": [ |
1327 | 1278 | { |
|
1390 | 1341 | "description": "Forbidden" |
1391 | 1342 | } |
1392 | 1343 | }, |
1393 | | - "summary": "Get All Organizations", |
| 1344 | + "summary": "Get all organizations of member", |
1394 | 1345 | "x-stackit-authorization": { |
1395 | 1346 | "disabled": true, |
1396 | 1347 | "implicit-actions": [ |
1397 | | - "resource-manager.organization.get" |
| 1348 | + "resource-manager.organization.get", |
| 1349 | + "resource-manager.organization.list" |
1398 | 1350 | ] |
1399 | 1351 | } |
1400 | 1352 | } |
1401 | 1353 | }, |
1402 | 1354 | "/v2/organizations/{containerId}/labels": { |
1403 | 1355 | "delete": { |
1404 | | - "description": "Deletes all organization labels by given keys.\n- Specific labels may be deleted by key(s)\n- If no key is specified, all labels will be deleted!", |
| 1356 | + "description": "Deletes organization labels by specified keys, or removes all labels if no key is provided.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Organization: resource-manager.organization.edit (required permission on the organization to delete labels).", |
1405 | 1357 | "operationId": "DeleteOrganizationLabels", |
1406 | 1358 | "parameters": [ |
1407 | 1359 | { |
|
1438 | 1390 | }, |
1439 | 1391 | "summary": "Delete Organization Labels", |
1440 | 1392 | "x-stackit-authorization": { |
1441 | | - "actions": [ |
| 1393 | + "disabled": true, |
| 1394 | + "implicit-actions": [ |
1442 | 1395 | "resource-manager.organization.edit" |
1443 | | - ], |
1444 | | - "resource-id": "containerId", |
1445 | | - "resource-id-type": "dynamic", |
1446 | | - "resource-type": "organization" |
| 1396 | + ] |
1447 | 1397 | } |
1448 | 1398 | }, |
1449 | 1399 | "parameters": [ |
|
1460 | 1410 | }, |
1461 | 1411 | "/v2/organizations/{id}": { |
1462 | 1412 | "get": { |
1463 | | - "description": "Returns the organization and its metadata.", |
| 1413 | + "description": "Returns metadata for a specific organization.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Organization: resource-manager.organization.get (required permission on the organization to view its details).", |
1464 | 1414 | "operationId": "GetOrganization", |
1465 | 1415 | "responses": { |
1466 | 1416 | "200": { |
|
1491 | 1441 | }, |
1492 | 1442 | "summary": "Get Organization Details", |
1493 | 1443 | "x-stackit-authorization": { |
1494 | | - "actions": [ |
| 1444 | + "disabled": true, |
| 1445 | + "implicit-actions": [ |
1495 | 1446 | "resource-manager.organization.get" |
1496 | | - ], |
1497 | | - "resource-id": "id", |
1498 | | - "resource-id-type": "dynamic", |
1499 | | - "resource-type": "organization" |
| 1447 | + ] |
1500 | 1448 | } |
1501 | 1449 | }, |
1502 | 1450 | "parameters": [ |
|
1511 | 1459 | } |
1512 | 1460 | ], |
1513 | 1461 | "patch": { |
1514 | | - "description": "Update the organization and its metadata.\n- Update organization name\n- Update organization labels", |
| 1462 | + "description": "Updates organization metadata (name, labels).\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Organization: resource-manager.organization.edit (required permission on the organization to update metadata and labels).", |
1515 | 1463 | "operationId": "PartialUpdateOrganization", |
1516 | 1464 | "requestBody": { |
1517 | 1465 | "content": { |
|
1566 | 1514 | }, |
1567 | 1515 | "summary": "Update Organization", |
1568 | 1516 | "x-stackit-authorization": { |
1569 | | - "actions": [ |
| 1517 | + "disabled": true, |
| 1518 | + "implicit-actions": [ |
1570 | 1519 | "resource-manager.organization.edit" |
1571 | | - ], |
1572 | | - "resource-id": "id", |
1573 | | - "resource-id-type": "dynamic", |
1574 | | - "resource-type": "organization" |
| 1520 | + ] |
1575 | 1521 | } |
1576 | 1522 | } |
1577 | 1523 | }, |
1578 | 1524 | "/v2/projects": { |
1579 | 1525 | "get": { |
1580 | | - "description": "Returns all projects and their metadata that: \n- Are children of the specific containerParentId\n- Match the given containerIds\n- User is member of\n\nFilter:\n- Either containerParentId OR containerIds OR member must be passed\n- If containerId and containerParentId are given, both are used for filtering - containers must point to the same parent\n- If member and containerParentId are given, both are used for filtering\n- If member is given, containers must not point to the same container parent", |
| 1526 | + "description": "Returns all projects and their metadata that: \n- Are children of the specific containerParentId\n- Match the given containerIds\n- User is member of\n\nFilter:\n- Either containerParentId OR containerIds OR member must be passed\n- If containerId and containerParentId are given, both are used for filtering - containers must point to the same parent\n- If member and containerParentId are given, both are used for filtering\n- If member is given, containers must not point to the same container parent\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Projects: resource-manager.project.get, resource-manager.project.list, or resource-manager.project.direct.get to filter and return accessible projects.", |
1581 | 1527 | "operationId": "ListProjects", |
1582 | 1528 | "parameters": [ |
1583 | 1529 | { |
|
1654 | 1600 | "description": "Forbidden" |
1655 | 1601 | } |
1656 | 1602 | }, |
1657 | | - "summary": "Get All Projects", |
| 1603 | + "summary": "Get All Projects of a member.", |
1658 | 1604 | "x-stackit-authorization": { |
1659 | 1605 | "disabled": true, |
1660 | 1606 | "implicit-actions": [ |
1661 | | - "resource-manager.project.list" |
| 1607 | + "resource-manager.project.get", |
| 1608 | + "resource-manager.project.list", |
| 1609 | + "resource-manager.project.direct.get" |
1662 | 1610 | ] |
1663 | 1611 | } |
1664 | 1612 | }, |
1665 | 1613 | "post": { |
1666 | | - "description": "Create a new project. \n- The request is synchronous, but the workflow-based creation is asynchronous.\n- Lifecycle state remains in CREATING, until workflow completes", |
| 1614 | + "description": "Creates a new project within a parent container.\n- Creation request returns synchronously, while underlying resource provisioning runs asynchronously.\n- Initial lifecycle state is CREATING until provisioning completes.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Parent Container: resource-manager.project.create (required permission on the target parent organization or folder to create a project).", |
1667 | 1615 | "operationId": "CreateProject", |
1668 | 1616 | "requestBody": { |
1669 | 1617 | "content": { |
|
1742 | 1690 | }, |
1743 | 1691 | "/v2/projects/{containerId}/labels": { |
1744 | 1692 | "delete": { |
1745 | | - "description": "Deletes all project labels by given keys.\n- Specific labels may be deleted by key(s)\n- If no key is specified, all labels will be deleted!", |
| 1693 | + "description": "Deletes project labels by specified keys, or removes all labels if no key is provided.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Project: resource-manager.project.edit (required permission on the project to delete its labels).", |
1746 | 1694 | "operationId": "DeleteProjectLabels", |
1747 | 1695 | "parameters": [ |
1748 | 1696 | { |
|
1779 | 1727 | }, |
1780 | 1728 | "summary": "Delete Project Labels", |
1781 | 1729 | "x-stackit-authorization": { |
1782 | | - "actions": [ |
| 1730 | + "disabled": true, |
| 1731 | + "implicit-actions": [ |
1783 | 1732 | "resource-manager.project.edit" |
1784 | | - ], |
1785 | | - "resource-id": "containerId", |
1786 | | - "resource-id-type": "dynamic", |
1787 | | - "resource-type": "project" |
| 1733 | + ] |
1788 | 1734 | } |
1789 | 1735 | }, |
1790 | 1736 | "parameters": [ |
|
1801 | 1747 | }, |
1802 | 1748 | "/v2/projects/{id}": { |
1803 | 1749 | "delete": { |
1804 | | - "description": "Triggers the deletion of a project. \n- The request is synchronous, but the workflow-based deletion is asynchronous\n- Lifecycle state remains in DELETING, until workflow completes", |
| 1750 | + "description": "Triggers the deletion of a project.\n- Request returns synchronously, while deletion process runs asynchronously.\n- Initial lifecycle state is DELETING until workflow completes.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Project: resource-manager.project.delete (required permission on the project to delete it).", |
1805 | 1751 | "operationId": "DeleteProject", |
1806 | 1752 | "responses": { |
1807 | 1753 | "202": { |
|
1825 | 1771 | }, |
1826 | 1772 | "summary": "Delete Project", |
1827 | 1773 | "x-stackit-authorization": { |
1828 | | - "actions": [ |
| 1774 | + "disabled": true, |
| 1775 | + "implicit-actions": [ |
1829 | 1776 | "resource-manager.project.delete" |
1830 | | - ], |
1831 | | - "resource-id": "id", |
1832 | | - "resource-id-type": "dynamic", |
1833 | | - "resource-type": "project" |
| 1777 | + ] |
1834 | 1778 | } |
1835 | 1779 | }, |
1836 | 1780 | "get": { |
1837 | | - "description": "Returns the project and its metadata.", |
| 1781 | + "description": "Returns the project and its metadata.\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Project: resource-manager.project.get (required primary permission to view project details).\n- Evaluated on Parent Containers: resource-manager.organization.get and resource-manager.folder.get on parent organizations/folders implicitly to resolve and include parent metadata in the response hierarchy.", |
1838 | 1782 | "operationId": "GetProject", |
1839 | 1783 | "parameters": [ |
1840 | 1784 | { |
|
1890 | 1834 | }, |
1891 | 1835 | "summary": "Get Project Details", |
1892 | 1836 | "x-stackit-authorization": { |
1893 | | - "actions": [ |
| 1837 | + "disabled": true, |
| 1838 | + "implicit-actions": [ |
| 1839 | + "resource-manager.organization.get", |
| 1840 | + "resource-manager.folder.get", |
1894 | 1841 | "resource-manager.project.get" |
1895 | | - ], |
1896 | | - "resource-id": "id", |
1897 | | - "resource-id-type": "dynamic", |
1898 | | - "resource-type": "project" |
| 1842 | + ] |
1899 | 1843 | } |
1900 | 1844 | }, |
1901 | 1845 | "parameters": [ |
|
1910 | 1854 | } |
1911 | 1855 | ], |
1912 | 1856 | "patch": { |
1913 | | - "description": "Update the project and its metadata.\n- Update project name \n- Update project labels \n- Update project parent (folder or organization)", |
| 1857 | + "description": "Updates project metadata (name, labels, or parent hierarchy).\n\nAuthorization \u0026 Permissions:\n- Evaluated on Target Project: resource-manager.project.edit (required permission on the project to modify its details, labels, or parent).", |
1914 | 1858 | "operationId": "PartialUpdateProject", |
1915 | 1859 | "requestBody": { |
1916 | 1860 | "content": { |
|
1980 | 1924 | }, |
1981 | 1925 | "summary": "Update Project", |
1982 | 1926 | "x-stackit-authorization": { |
1983 | | - "actions": [ |
| 1927 | + "disabled": true, |
| 1928 | + "implicit-actions": [ |
1984 | 1929 | "resource-manager.project.edit" |
1985 | | - ], |
1986 | | - "resource-id": "id", |
1987 | | - "resource-id-type": "dynamic", |
1988 | | - "resource-type": "project" |
| 1930 | + ] |
1989 | 1931 | } |
1990 | 1932 | } |
1991 | 1933 | } |
|
0 commit comments