-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/75213/#review226963
-----------------------------------------------------------




security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java
Line 1079 (original), 1089 (patched)
<https://reviews.apache.org/r/75213/#comment315253>

    Given the purpose of the updated API is to add resources to a dataset, I 
suggest to introduce a new API that takes datasetId and serviceName in path 
parameters - as given below:
    
    @POST
    @Path("/dataset/{id}/resources/{serviceName}")
    @Consumes({ "application/json" })
    @Produces({ "application/json" })
    @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + 
RangerAPIList.ADD_SHARED_RESOURCES + "\")")
    public List<RangerSharedResource> addDatasetResources(@PathParam("id") Long 
datasetId,
                                                          
@PathParam("serviceName") String serviceName,
                                                          
@QueryParam("zoneName") @DefaultValue("") String zoneName,
                                                          
List<RangerSharedResource> resources) {
      Long   serviceId     = getServiceId(serviceName);
      Long   zoneId        = getZoneId(zoneName);
      
      // validate serviceId and zoneId
    
      String dataShareName = "__dataset_" + datasetId + "__service_" + 
serviceId + "__zone_" + zoneId;
      
      Long dataShareId = getOrCreateDataShare(dataShareName);
      
      resources.forEach(resource -> resource.setDataShareId(dataShareId));
      
      return addSharedResources(resources);
    }


- Madhan Neethiraj


On Sept. 30, 2024, 3:59 a.m., Ramesh Mani wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/75213/
> -----------------------------------------------------------
> 
> (Updated Sept. 30, 2024, 3:59 a.m.)
> 
> 
> Review request for ranger, Abhay Kulkarni, Madhan Neethiraj, and Radhika 
> Kundam.
> 
> 
> Bugs: RANGER-4937
>     https://issues.apache.org/jira/browse/RANGER-4937
> 
> 
> Repository: ranger
> 
> 
> Description
> -------
> 
> RANGER-4937: Enhance GDS resources API to support creation of datashare add 
> resources and add to dataset as an option
> 
> 
> Diffs
> -----
> 
>   security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java 0b3d91001 
> 
> 
> Diff: https://reviews.apache.org/r/75213/diff/2/
> 
> 
> Testing
> -------
> 
> Enhance GDS resources API to support creation of datashare, add resources and 
> add to dataset as an option
> 
> - add a resource to a dataset using existing API "POST service/gds/resource", 
> with following enhancements:
> - receive optional parameters "serviceName" and "datasetId"
> -  when dataShareId=-1 in the payload, this API should do the following:
>        if a data share named "_dataset<datasetId>service<svcId>" does not 
> exist, create it, associate it with the dataset with status=ACTIVE
> add the given resource/resources to this datashare
>        This would be useful to integrate external service which would use the 
> GDS functionality to create DataShare in ranger with resources
>  
>  Testing done with local vm:
>   - Create a DataSet with "POST service/gds/dataset".
>   - Call the enhanced API  "POST service/gds/resources" as following.
>   
>   curl  -ikv -u <user:password> -X POST  -H "Content-Type: application/json" 
> 'http://localhost:6080/service/gds/resources?serviceName=cm_hive&id=26' 
> --data '[ { "createdBy": "Admin", "isEnabled": "true", "version": 1, 
> "dataShareId":"-1", "resource":{ "database":{ "values":["test_db"] }, 
> "table":{ "values":["sal1","sal2","sal4"] }, "column": { "values": [ "id" ], 
> "isExcludes": false, "isRecursive": false } }, "name":"test-resource-17", 
> "accessTypes":["all"] }, { "createdBy": "Admin", "isEnabled": "true", 
> "version": 1, "dataShareId":"-1", "resource":{ "database":{ 
> "values":["default"] }, "table":{ 
> "values":["sal2","emp","tb_1","sal1","sal3","tb_2"] }, "column": { "values": 
> [ "*" ], "isExcludes": false, "isRecursive": false } }, 
> "name":"test-resource-18", "accessTypes":["all"] } ]'
>   
>    curl  -ikv -u admin:Admin123 -X POST  -H "Content-Type: application/json" 
> 'http://localhost:6080/service/gds/resources' --data '[ { "createdBy": 
> "Admin", "isEnabled": "true", "version": 1, "dataShareId":"29", "resource":{ 
> "database":{ "values":["test_db"] }, "table":{ 
> "values":["sal1","sal2","sal4"] }, "column": { "values": [ "id" ], 
> "isExcludes": false, "isRecursive": false } }, "name":"test-resource-17", 
> "accessTypes":["all"] }, { "createdBy": "Admin", "isEnabled": "true", 
> "version": 1, "dataShareId":"29", "resource":{ "database":{ 
> "values":["default"] }, "table":{ 
> "values":["sal2","emp","tb_1","sal1","sal3","tb_2"] }, "column": { "values": 
> [ "*" ], "isExcludes": false, "isRecursive": false } }, 
> "name":"test-resource-18", "accessTypes":["all"] } ]'
> 
> 
> Thanks,
> 
> Ramesh Mani
> 
>

Reply via email to