Skip to content

Commit 422bd4b

Browse files
add security endpoints to dataset and solution
add missing endpoints : -getSecurity -setDefaultSecurity to both Dataset and Solution services
1 parent d8c71ed commit 422bd4b

File tree

7 files changed

+313
-0
lines changed

7 files changed

+313
-0
lines changed

dataset/src/main/kotlin/com/cosmotech/dataset/service/DatasetServiceImpl.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ import com.cosmotech.dataset.utils.toCsmGraphEntity
6161
import com.cosmotech.dataset.utils.toJsonString
6262
import com.cosmotech.organization.api.OrganizationApiService
6363
import com.cosmotech.organization.service.getRbac
64+
import com.cosmotech.workspace.service.getRbac
65+
import com.cosmotech.workspace.service.setRbac
6466
import com.redislabs.redisgraph.Record
6567
import com.redislabs.redisgraph.RedisGraph
6668
import com.redislabs.redisgraph.ResultSet
@@ -752,6 +754,29 @@ class DatasetServiceImpl(
752754
}
753755
}
754756

757+
override fun getDatasetSecurity(organizationId: String, datasetId: String): DatasetSecurity {
758+
759+
val dataset = findDatasetById(organizationId, datasetId)
760+
csmRbac.verify(dataset.getRbac(), PERMISSION_READ_SECURITY)
761+
return dataset.security
762+
?: throw CsmResourceNotFoundException("RBAC not defined for ${dataset.id}")
763+
}
764+
765+
override fun setDatasetDefaultSecurity(
766+
organizationId: String,
767+
datasetId: String,
768+
datasetRole: DatasetRole
769+
): DatasetSecurity {
770+
// This call verify by itself that we have the read authorization in the organization
771+
organizationService.findOrganizationById(organizationId)
772+
val dataset = findDatasetById(organizationId, datasetId)
773+
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE_SECURITY)
774+
val rbacSecurity = csmRbac.setDefault(dataset.getRbac(), datasetRole.role)
775+
dataset.setRbac(rbacSecurity)
776+
datasetRepository.save(dataset)
777+
return dataset.security as DatasetSecurity
778+
}
779+
755780
override fun addDatasetAccessControl(
756781
organizationId: String,
757782
datasetId: String,

dataset/src/main/openapi/dataset.yaml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,6 +1048,82 @@ paths:
10481048
description: Request succeeded
10491049
"404":
10501050
description: the ValidatorRun specified is unknown or you don't have access to it
1051+
/organizations/{organization_id}/datasets/{dataset_id}/security:
1052+
parameters:
1053+
- name: organization_id
1054+
in: path
1055+
description: the Organization identifier
1056+
required: true
1057+
schema:
1058+
type: string
1059+
- name: dataset_id
1060+
in: path
1061+
description: the Dataset identifier
1062+
required: true
1063+
schema:
1064+
type: string
1065+
get:
1066+
operationId: getDatasetSecurity
1067+
tags:
1068+
- dataset
1069+
summary: Get the Dataset security information
1070+
responses:
1071+
"200":
1072+
description: The Dataset security
1073+
content:
1074+
application/json:
1075+
schema:
1076+
$ref: '#/components/schemas/DatasetSecurity'
1077+
examples:
1078+
DatasetSecurity:
1079+
$ref: '#/components/examples/BreweryDatasetSecurity'
1080+
"404":
1081+
description: the Dataset specified is unknown or you don't have access to it
1082+
/organizations/{organization_id}/datasets/{dataset_id}/security/default:
1083+
parameters:
1084+
- name: organization_id
1085+
in: path
1086+
description: the Organization identifier
1087+
required: true
1088+
schema:
1089+
type: string
1090+
- name: dataset_id
1091+
in: path
1092+
description: the Dataset identifier
1093+
required: true
1094+
schema:
1095+
type: string
1096+
post:
1097+
operationId: setDatasetDefaultSecurity
1098+
tags:
1099+
- dataset
1100+
summary: Set the Dataset default security
1101+
requestBody:
1102+
description: the new Dataset default security.
1103+
required: true
1104+
content:
1105+
application/json:
1106+
schema:
1107+
$ref: '#/components/schemas/DatasetRole'
1108+
examples:
1109+
BreweryDatasetRole:
1110+
$ref: '#/components/examples/BreweryDatasetRole'
1111+
application/yaml:
1112+
schema:
1113+
type: string
1114+
format: binary
1115+
examples:
1116+
BreweryDatasetRole:
1117+
$ref: '#/components/examples/BreweryDatasetRole'
1118+
responses:
1119+
"201":
1120+
description: The Dataset default visibility
1121+
content:
1122+
application/json:
1123+
schema:
1124+
$ref: '#/components/schemas/DatasetSecurity'
1125+
"404":
1126+
description: the Dataset specified is unknown or you don't have access to it
10511127
/organizations/{organization_id}/datasets/{dataset_id}/security/access:
10521128
parameters:
10531129
- name: organization_id

doc/Apis/DatasetApi.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ Method | HTTP request | Description
1616
[**findAllDatasets**](DatasetApi.md#findAllDatasets) | **GET** /organizations/{organization_id}/datasets | List all Datasets
1717
[**findDatasetById**](DatasetApi.md#findDatasetById) | **GET** /organizations/{organization_id}/datasets/{dataset_id} | Get the details of a Dataset
1818
[**getDatasetAccessControl**](DatasetApi.md#getDatasetAccessControl) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/security/access/{identity_id} | Get a control access for the Dataset
19+
[**getDatasetSecurity**](DatasetApi.md#getDatasetSecurity) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/security | Get the Dataset security information
1920
[**getDatasetSecurityUsers**](DatasetApi.md#getDatasetSecurityUsers) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/security/users | Get the Dataset security users list
2021
[**getDatasetTwingraphStatus**](DatasetApi.md#getDatasetTwingraphStatus) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/job/{job_id}/status | Get the status of twingraph import
2122
[**getTwingraphEntities**](DatasetApi.md#getTwingraphEntities) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/twingraph/{type} | Get entities in a graph instance
2223
[**refreshDataset**](DatasetApi.md#refreshDataset) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/refresh | Refresh dataset
2324
[**removeAllDatasetCompatibilityElements**](DatasetApi.md#removeAllDatasetCompatibilityElements) | **DELETE** /organizations/{organization_id}/datasets/{dataset_id}/compatibility | Remove all Dataset Compatibility elements from the Dataset specified
2425
[**removeDatasetAccessControl**](DatasetApi.md#removeDatasetAccessControl) | **DELETE** /organizations/{organization_id}/datasets/{dataset_id}/security/access/{identity_id} | Remove the specified access from the given Dataset
2526
[**searchDatasets**](DatasetApi.md#searchDatasets) | **POST** /organizations/{organization_id}/datasets/search | Search Datasets
27+
[**setDatasetDefaultSecurity**](DatasetApi.md#setDatasetDefaultSecurity) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/security/default | Set the Dataset default security
2628
[**twingraphBatchQuery**](DatasetApi.md#twingraphBatchQuery) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/batch-query | Run a query on a graph instance and return the result as a zip file in async mode
2729
[**twingraphBatchUpdate**](DatasetApi.md#twingraphBatchUpdate) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/batch | Async batch update by loading a CSV file on a graph instance
2830
[**twingraphQuery**](DatasetApi.md#twingraphQuery) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/twingraph | Run a query on a graph instance and return the result as a json
@@ -361,6 +363,32 @@ Name | Type | Description | Notes
361363
- **Content-Type**: Not defined
362364
- **Accept**: application/json
363365

366+
<a name="getDatasetSecurity"></a>
367+
# **getDatasetSecurity**
368+
> DatasetSecurity getDatasetSecurity(organization\_id, dataset\_id)
369+
370+
Get the Dataset security information
371+
372+
### Parameters
373+
374+
Name | Type | Description | Notes
375+
------------- | ------------- | ------------- | -------------
376+
**organization\_id** | **String**| the Organization identifier | [default to null]
377+
**dataset\_id** | **String**| the Dataset identifier | [default to null]
378+
379+
### Return type
380+
381+
[**DatasetSecurity**](../Models/DatasetSecurity.md)
382+
383+
### Authorization
384+
385+
[oAuth2AuthCode](../README.md#oAuth2AuthCode)
386+
387+
### HTTP request headers
388+
389+
- **Content-Type**: Not defined
390+
- **Accept**: application/json
391+
364392
<a name="getDatasetSecurityUsers"></a>
365393
# **getDatasetSecurityUsers**
366394
> List getDatasetSecurityUsers(organization\_id, dataset\_id)
@@ -555,6 +583,33 @@ Name | Type | Description | Notes
555583
- **Content-Type**: application/json, application/yaml
556584
- **Accept**: application/json
557585

586+
<a name="setDatasetDefaultSecurity"></a>
587+
# **setDatasetDefaultSecurity**
588+
> DatasetSecurity setDatasetDefaultSecurity(organization\_id, dataset\_id, DatasetRole)
589+
590+
Set the Dataset default security
591+
592+
### Parameters
593+
594+
Name | Type | Description | Notes
595+
------------- | ------------- | ------------- | -------------
596+
**organization\_id** | **String**| the Organization identifier | [default to null]
597+
**dataset\_id** | **String**| the Dataset identifier | [default to null]
598+
**DatasetRole** | [**DatasetRole**](../Models/DatasetRole.md)| the new Dataset default security. |
599+
600+
### Return type
601+
602+
[**DatasetSecurity**](../Models/DatasetSecurity.md)
603+
604+
### Authorization
605+
606+
[oAuth2AuthCode](../README.md#oAuth2AuthCode)
607+
608+
### HTTP request headers
609+
610+
- **Content-Type**: application/json, application/yaml
611+
- **Accept**: application/json
612+
558613
<a name="twingraphBatchQuery"></a>
559614
# **twingraphBatchQuery**
560615
> DatasetTwinGraphHash twingraphBatchQuery(organization\_id, dataset\_id, DatasetTwinGraphQuery)

doc/Apis/SolutionApi.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ Method | HTTP request | Description
1515
[**findAllSolutions**](SolutionApi.md#findAllSolutions) | **GET** /organizations/{organization_id}/solutions | List all Solutions
1616
[**findSolutionById**](SolutionApi.md#findSolutionById) | **GET** /organizations/{organization_id}/solutions/{solution_id} | Get the details of a solution
1717
[**getSolutionAccessControl**](SolutionApi.md#getSolutionAccessControl) | **GET** /organizations/{organization_id}/solutions/{solution_id}/security/access/{identity_id} | Get a control access for the Solution
18+
[**getSolutionSecurity**](SolutionApi.md#getSolutionSecurity) | **GET** /organizations/{organization_id}/solutions/{solution_id}/security | Get the Solution security information
1819
[**getSolutionSecurityUsers**](SolutionApi.md#getSolutionSecurityUsers) | **GET** /organizations/{organization_id}/solutions/{solution_id}/security/users | Get the Solution security users list
1920
[**removeAllRunTemplates**](SolutionApi.md#removeAllRunTemplates) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/runTemplates | Remove all Run Templates from the Solution specified
2021
[**removeAllSolutionParameterGroups**](SolutionApi.md#removeAllSolutionParameterGroups) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/parameterGroups | Remove all Parameter Groups from the Solution specified
2122
[**removeAllSolutionParameters**](SolutionApi.md#removeAllSolutionParameters) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/parameters | Remove all Parameters from the Solution specified
2223
[**removeSolutionAccessControl**](SolutionApi.md#removeSolutionAccessControl) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/security/access/{identity_id} | Remove the specified access from the given Organization Solution
24+
[**setSolutionDefaultSecurity**](SolutionApi.md#setSolutionDefaultSecurity) | **POST** /organizations/{organization_id}/solutions/{solution_id}/security/default | Set the Solution default security
2325
[**updateSolution**](SolutionApi.md#updateSolution) | **PATCH** /organizations/{organization_id}/solutions/{solution_id} | Update a solution
2426
[**updateSolutionAccessControl**](SolutionApi.md#updateSolutionAccessControl) | **PATCH** /organizations/{organization_id}/solutions/{solution_id}/security/access/{identity_id} | Update the specified access to User for a Solution
2527
[**updateSolutionRunTemplate**](SolutionApi.md#updateSolutionRunTemplate) | **PATCH** /organizations/{organization_id}/solutions/{solution_id}/runTemplates/{run_template_id} | Update the specified Solution Run Template
@@ -321,6 +323,32 @@ Name | Type | Description | Notes
321323
- **Content-Type**: Not defined
322324
- **Accept**: application/json
323325

326+
<a name="getSolutionSecurity"></a>
327+
# **getSolutionSecurity**
328+
> SolutionSecurity getSolutionSecurity(organization\_id, solution\_id)
329+
330+
Get the Solution security information
331+
332+
### Parameters
333+
334+
Name | Type | Description | Notes
335+
------------- | ------------- | ------------- | -------------
336+
**organization\_id** | **String**| the Organization identifier | [default to null]
337+
**solution\_id** | **String**| the Solution identifier | [default to null]
338+
339+
### Return type
340+
341+
[**SolutionSecurity**](../Models/SolutionSecurity.md)
342+
343+
### Authorization
344+
345+
[oAuth2AuthCode](../README.md#oAuth2AuthCode)
346+
347+
### HTTP request headers
348+
349+
- **Content-Type**: Not defined
350+
- **Accept**: application/json
351+
324352
<a name="getSolutionSecurityUsers"></a>
325353
# **getSolutionSecurityUsers**
326354
> List getSolutionSecurityUsers(organization\_id, solution\_id)
@@ -452,6 +480,33 @@ null (empty response body)
452480
- **Content-Type**: Not defined
453481
- **Accept**: Not defined
454482

483+
<a name="setSolutionDefaultSecurity"></a>
484+
# **setSolutionDefaultSecurity**
485+
> SolutionSecurity setSolutionDefaultSecurity(organization\_id, solution\_id, SolutionRole)
486+
487+
Set the Solution default security
488+
489+
### Parameters
490+
491+
Name | Type | Description | Notes
492+
------------- | ------------- | ------------- | -------------
493+
**organization\_id** | **String**| the Organization identifier | [default to null]
494+
**solution\_id** | **String**| the Solution identifier | [default to null]
495+
**SolutionRole** | [**SolutionRole**](../Models/SolutionRole.md)| the new Solution default security. |
496+
497+
### Return type
498+
499+
[**SolutionSecurity**](../Models/SolutionSecurity.md)
500+
501+
### Authorization
502+
503+
[oAuth2AuthCode](../README.md#oAuth2AuthCode)
504+
505+
### HTTP request headers
506+
507+
- **Content-Type**: application/json, application/yaml
508+
- **Accept**: application/json
509+
455510
<a name="updateSolution"></a>
456511
# **updateSolution**
457512
> Solution updateSolution(organization\_id, solution\_id, Solution)

doc/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ Class | Method | HTTP request | Description
2424
*DatasetApi* | [**findAllDatasets**](Apis/DatasetApi.md#findalldatasets) | **GET** /organizations/{organization_id}/datasets | List all Datasets
2525
*DatasetApi* | [**findDatasetById**](Apis/DatasetApi.md#finddatasetbyid) | **GET** /organizations/{organization_id}/datasets/{dataset_id} | Get the details of a Dataset
2626
*DatasetApi* | [**getDatasetAccessControl**](Apis/DatasetApi.md#getdatasetaccesscontrol) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/security/access/{identity_id} | Get a control access for the Dataset
27+
*DatasetApi* | [**getDatasetSecurity**](Apis/DatasetApi.md#getdatasetsecurity) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/security | Get the Dataset security information
2728
*DatasetApi* | [**getDatasetSecurityUsers**](Apis/DatasetApi.md#getdatasetsecurityusers) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/security/users | Get the Dataset security users list
2829
*DatasetApi* | [**getDatasetTwingraphStatus**](Apis/DatasetApi.md#getdatasettwingraphstatus) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/job/{job_id}/status | Get the status of twingraph import
2930
*DatasetApi* | [**getTwingraphEntities**](Apis/DatasetApi.md#gettwingraphentities) | **GET** /organizations/{organization_id}/datasets/{dataset_id}/twingraph/{type} | Get entities in a graph instance
3031
*DatasetApi* | [**refreshDataset**](Apis/DatasetApi.md#refreshdataset) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/refresh | Refresh dataset
3132
*DatasetApi* | [**removeAllDatasetCompatibilityElements**](Apis/DatasetApi.md#removealldatasetcompatibilityelements) | **DELETE** /organizations/{organization_id}/datasets/{dataset_id}/compatibility | Remove all Dataset Compatibility elements from the Dataset specified
3233
*DatasetApi* | [**removeDatasetAccessControl**](Apis/DatasetApi.md#removedatasetaccesscontrol) | **DELETE** /organizations/{organization_id}/datasets/{dataset_id}/security/access/{identity_id} | Remove the specified access from the given Dataset
3334
*DatasetApi* | [**searchDatasets**](Apis/DatasetApi.md#searchdatasets) | **POST** /organizations/{organization_id}/datasets/search | Search Datasets
35+
*DatasetApi* | [**setDatasetDefaultSecurity**](Apis/DatasetApi.md#setdatasetdefaultsecurity) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/security/default | Set the Dataset default security
3436
*DatasetApi* | [**twingraphBatchQuery**](Apis/DatasetApi.md#twingraphbatchquery) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/batch-query | Run a query on a graph instance and return the result as a zip file in async mode
3537
*DatasetApi* | [**twingraphBatchUpdate**](Apis/DatasetApi.md#twingraphbatchupdate) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/batch | Async batch update by loading a CSV file on a graph instance
3638
*DatasetApi* | [**twingraphQuery**](Apis/DatasetApi.md#twingraphquery) | **POST** /organizations/{organization_id}/datasets/{dataset_id}/twingraph | Run a query on a graph instance and return the result as a json
@@ -104,11 +106,13 @@ Class | Method | HTTP request | Description
104106
*SolutionApi* | [**findAllSolutions**](Apis/SolutionApi.md#findallsolutions) | **GET** /organizations/{organization_id}/solutions | List all Solutions
105107
*SolutionApi* | [**findSolutionById**](Apis/SolutionApi.md#findsolutionbyid) | **GET** /organizations/{organization_id}/solutions/{solution_id} | Get the details of a solution
106108
*SolutionApi* | [**getSolutionAccessControl**](Apis/SolutionApi.md#getsolutionaccesscontrol) | **GET** /organizations/{organization_id}/solutions/{solution_id}/security/access/{identity_id} | Get a control access for the Solution
109+
*SolutionApi* | [**getSolutionSecurity**](Apis/SolutionApi.md#getsolutionsecurity) | **GET** /organizations/{organization_id}/solutions/{solution_id}/security | Get the Solution security information
107110
*SolutionApi* | [**getSolutionSecurityUsers**](Apis/SolutionApi.md#getsolutionsecurityusers) | **GET** /organizations/{organization_id}/solutions/{solution_id}/security/users | Get the Solution security users list
108111
*SolutionApi* | [**removeAllRunTemplates**](Apis/SolutionApi.md#removeallruntemplates) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/runTemplates | Remove all Run Templates from the Solution specified
109112
*SolutionApi* | [**removeAllSolutionParameterGroups**](Apis/SolutionApi.md#removeallsolutionparametergroups) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/parameterGroups | Remove all Parameter Groups from the Solution specified
110113
*SolutionApi* | [**removeAllSolutionParameters**](Apis/SolutionApi.md#removeallsolutionparameters) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/parameters | Remove all Parameters from the Solution specified
111114
*SolutionApi* | [**removeSolutionAccessControl**](Apis/SolutionApi.md#removesolutionaccesscontrol) | **DELETE** /organizations/{organization_id}/solutions/{solution_id}/security/access/{identity_id} | Remove the specified access from the given Organization Solution
115+
*SolutionApi* | [**setSolutionDefaultSecurity**](Apis/SolutionApi.md#setsolutiondefaultsecurity) | **POST** /organizations/{organization_id}/solutions/{solution_id}/security/default | Set the Solution default security
112116
*SolutionApi* | [**updateSolution**](Apis/SolutionApi.md#updatesolution) | **PATCH** /organizations/{organization_id}/solutions/{solution_id} | Update a solution
113117
*SolutionApi* | [**updateSolutionAccessControl**](Apis/SolutionApi.md#updatesolutionaccesscontrol) | **PATCH** /organizations/{organization_id}/solutions/{solution_id}/security/access/{identity_id} | Update the specified access to User for a Solution
114118
*SolutionApi* | [**updateSolutionRunTemplate**](Apis/SolutionApi.md#updatesolutionruntemplate) | **PATCH** /organizations/{organization_id}/solutions/{solution_id}/runTemplates/{run_template_id} | Update the specified Solution Run Template

0 commit comments

Comments
 (0)