From 0e6c8320ba51279aa8d5251f19bf27b4464aa9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Je=C5=A1ke?= Date: Tue, 29 Sep 2026 13:35:47 +0200 Subject: [PATCH] feat(gooddata-api-client): add missing workspace permissions The backend permission hierarchy now includes CREATE_VISUALIZATION (implied by ANALYZE) and CREATE_COMPUTED_ATTRIBUTE (implied by MANAGE), but the specs this client generates from predate both. Because the values are implied, the workspace meta permissions of every ANALYZE or MANAGE user contain them, so reading a workspace failed client-side validation even when nobody was granted either permission explicitly. Declarative permissions and permission assignments that contain them could not be read, and a grant using them could not be built. Adds both values to the seven workspace-permission enums in the metadata spec, in backend order, and switches the security info of POST /entities/workspaces/{id}/visualizationObjects to CREATE_VISUALIZATION, then regenerates. The computed-attributes endpoint guarded by CREATE_COMPUTED_ATTRIBUTE is not in the specs yet and is left for a full re-download, so this delta stays limited to the enums. jira: F1-2924 risk: low Co-Authored-By: Claude Opus 5.5 (1M context) --- .../declarative_single_workspace_permission.py | 2 ++ ...clarative_workspace_hierarchy_permission.py | 2 ++ .../model/json_api_workspace_out_meta.py | 2 ++ ...nagement_workspace_permission_assignment.py | 4 ++++ .../model/workspace_permission_assignment.py | 4 ++++ schemas/gooddata-api-client.json | 18 ++++++++++++++++-- schemas/gooddata-metadata-client.json | 18 ++++++++++++++++-- 7 files changed, 46 insertions(+), 4 deletions(-) diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_single_workspace_permission.py b/gooddata-api-client/gooddata_api_client/model/declarative_single_workspace_permission.py index 3760ad2d8..22902918f 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_single_workspace_permission.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_single_workspace_permission.py @@ -72,6 +72,8 @@ class DeclarativeSingleWorkspacePermission(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_workspace_hierarchy_permission.py b/gooddata-api-client/gooddata_api_client/model/declarative_workspace_hierarchy_permission.py index 12c393fec..0cbb2c13b 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_workspace_hierarchy_permission.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_workspace_hierarchy_permission.py @@ -72,6 +72,8 @@ class DeclarativeWorkspaceHierarchyPermission(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_workspace_out_meta.py b/gooddata-api-client/gooddata_api_client/model/json_api_workspace_out_meta.py index ecadd6177..1e95c7ccb 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_workspace_out_meta.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_workspace_out_meta.py @@ -76,6 +76,8 @@ class JsonApiWorkspaceOutMeta(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/user_management_workspace_permission_assignment.py b/gooddata-api-client/gooddata_api_client/model/user_management_workspace_permission_assignment.py index 627e9e9b3..1a41bd4b1 100644 --- a/gooddata-api-client/gooddata_api_client/model/user_management_workspace_permission_assignment.py +++ b/gooddata-api-client/gooddata_api_client/model/user_management_workspace_permission_assignment.py @@ -68,6 +68,8 @@ class UserManagementWorkspacePermissionAssignment(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, ('permissions',): { @@ -82,6 +84,8 @@ class UserManagementWorkspacePermissionAssignment(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, ('access_source',): { diff --git a/gooddata-api-client/gooddata_api_client/model/workspace_permission_assignment.py b/gooddata-api-client/gooddata_api_client/model/workspace_permission_assignment.py index 33b53ed8b..149031040 100644 --- a/gooddata-api-client/gooddata_api_client/model/workspace_permission_assignment.py +++ b/gooddata-api-client/gooddata_api_client/model/workspace_permission_assignment.py @@ -72,6 +72,8 @@ class WorkspacePermissionAssignment(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, ('permissions',): { @@ -86,6 +88,8 @@ class WorkspacePermissionAssignment(ModelNormal): 'READ_KNOWLEDGE_DOCUMENTS': "READ_KNOWLEDGE_DOCUMENTS", 'CREATE_FILTER_VIEW': "CREATE_FILTER_VIEW", 'CREATE_METRIC': "CREATE_METRIC", + 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", + 'CREATE_COMPUTED_ATTRIBUTE': "CREATE_COMPUTED_ATTRIBUTE", 'VIEW': "VIEW", }, } diff --git a/schemas/gooddata-api-client.json b/schemas/gooddata-api-client.json index 14b90ac48..820b7cd91 100644 --- a/schemas/gooddata-api-client.json +++ b/schemas/gooddata-api-client.json @@ -8518,6 +8518,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -9434,6 +9436,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -31165,6 +31169,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -38398,6 +38404,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -38425,6 +38433,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -39303,6 +39313,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -39323,6 +39335,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -66771,9 +66785,9 @@ "visualization-object-controller" ], "x-gdc-security-info": { - "description": "Contains minimal permission level required to manage this object type.", + "description": "Contains minimal permission level required to create Visualizations", "permissions": [ - "ANALYZE" + "CREATE_VISUALIZATION" ] } } diff --git a/schemas/gooddata-metadata-client.json b/schemas/gooddata-metadata-client.json index 6a5880a44..20cbb4890 100644 --- a/schemas/gooddata-metadata-client.json +++ b/schemas/gooddata-metadata-client.json @@ -5991,6 +5991,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -6891,6 +6893,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -26795,6 +26799,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -30836,6 +30842,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -30863,6 +30871,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -31207,6 +31217,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -31227,6 +31239,8 @@ "READ_KNOWLEDGE_DOCUMENTS", "CREATE_FILTER_VIEW", "CREATE_METRIC", + "CREATE_VISUALIZATION", + "CREATE_COMPUTED_ATTRIBUTE", "VIEW" ], "type": "string" @@ -52975,9 +52989,9 @@ "visualization-object-controller" ], "x-gdc-security-info": { - "description": "Contains minimal permission level required to manage this object type.", + "description": "Contains minimal permission level required to create Visualizations", "permissions": [ - "ANALYZE" + "CREATE_VISUALIZATION" ] } }