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

(Updated March 21, 2024, 5:36 a.m.)


Review request for ranger, Asit Vadhavkar, Madhan Neethiraj, Monika Kachhadiya, 
Siddhesh Phatak, and Subhrat Chaudhary.


Bugs: RANGER-4749
    https://issues.apache.org/jira/browse/RANGER-4749


Repository: ranger


Description
-------

Created new tag api which will get the service resource by comparing the 
resouse signature of the resource from request. (GET - 
service/tags/resource/service/{serviceName}/resource?resource:database=db1&resource:database.isExcludes=false&resource:database.isRecursive=false)

Added list of tags to the service/tags/resource/paginated api which will return 
all the tags which are associated with the resource.

Added freetext search on resource, and multiple search of tagNames in 
service/tags/resources/paginated api - 
1 - service/tags/resources/paginated?tagServiceName=hive&resourceElements=Cust_
2 - 
service/tags/resources/paginated?tagServiceName=hive&tagNames=SSN&tagNames=PII_NAME


Diffs (updated)
-----

  
agents-common/src/main/java/org/apache/ranger/authorization/utils/JsonUtils.java
 716a1a9ea 
  
agents-common/src/main/java/org/apache/ranger/plugin/model/RangerServiceResourceWithTags.java
 PRE-CREATION 
  agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java 
b0fad0aea 
  security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java a472fe131 
  security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java 
c816ad229 
  security-admin/src/main/java/org/apache/ranger/rest/TagREST.java 09d771565 
  
security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsService.java
 PRE-CREATION 
  
security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceWithTagsServiceBase.java
 PRE-CREATION 
  
security-admin/src/main/java/org/apache/ranger/view/RangerServiceResourceWithTagsList.java
 PRE-CREATION 
  security-admin/src/test/java/org/apache/ranger/biz/TestTagDBStore.java 
d6ebbc54d 
  security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java 
98d87bc0a 


Diff: https://reviews.apache.org/r/74941/diff/7/

Changes: https://reviews.apache.org/r/74941/diff/6-7/


Testing
-------

Validated GET - service/tags/resource/service/{serviceName}/resource with 
postive and negative case.
Sample URL - 
/service/tags/resource/service/hive8/resource?resource:column=NAME&resource:column.isExcludes=false&resource:column.isRecursive=true&resource:database=HR-DB-1&resource:database.isExcludes=false&resource:database.isRecursive=true&resource:table=EMPLOYEE&resource:table.isExcludes=false&resource:table.isRecursive=true&resource:database=HR-DB-2

Response:
{
    "id": 21,
    "guid": "1acaa4c9-1f1a-4328-b265-bde77c94f98f",
    "isEnabled": true,
    "createdBy": "Admin",
    "updatedBy": "Admin",
    "createTime": 1710999025297,
    "updateTime": 1710999025362,
    "version": 4,
    "serviceName": "hive8",
    "resourceElements": {
        "column": {
            "values": [
                "NAME"
            ],
            "isExcludes": false,
            "isRecursive": true
        },
        "database": {
            "values": [
                "HR-DB-2",
                "HR-DB-1"
            ],
            "isExcludes": false,
            "isRecursive": true
        },
        "table": {
            "values": [
                "EMPLOYEE"
            ],
            "isExcludes": false,
            "isRecursive": true
        }
    },
    "resourceSignature": 
"24a4a0329c4c62f6a76d19231f5f748ef2e49de0301ebe9af2991a19e5b198a9"
}

The values of resource can be multiple - 
resource:database=db1&resource:database=db2
For isExcludes and isRecursive there will be a subkey - 
resource:database.isExcludes=false&resource:databasase.isRecursive=true

Validated response of service/tags/resources/paginated?tagServiceName=hive api 
Sample response
{
    "startIndex": 0,
    "pageSize": 5,
    "totalCount": 1,
    "resultSize": 1,
    "sortType": "asc",
    "sortBy": "resourceId",
    "queryTimeMS": 1710869881240,
    "resourceList": [
        {
            "id": 2,
            "guid": "3bc097ea-0685-48ea-84c2-ca02518f7738",
            "isEnabled": true,
            "createdBy": "Admin",
            "updatedBy": "Admin",
            "createTime": 1707986829922,
            "updateTime": 1708247930089,
            "version": 3,
            "serviceName": "hive",
            "resourceElements": {
                "database": {
                    "values": [
                        "db1"
                    ],
                    "isExcludes": false,
                    "isRecursive": false
                },
                "column": {
                    "values": [
                        "*"
                    ],
                    "isExcludes": false,
                    "isRecursive": false
                },
                "table": {
                    "values": [
                        "tbl1"
                    ],
                    "isExcludes": false,
                    "isRecursive": false
                }
            },
            "associatedTags": [
                {
                    "id": 2,
                    "guid": "a1d21642-3f4c-4557-9226-372d3dce5a64",
                    "isEnabled": true,
                    "createdBy": "Admin",
                    "updatedBy": "Admin",
                    "createTime": 1707986831329,
                    "updateTime": 1707986831556,
                    "type": "PII_NAME",
                    "owner": 0,
                    "attributes": {
                        "lastname": "stark"
                    }
                }
            ]
        }
    ]
}

Validated service/tags/resources/paginated api with resourceElements and 
tagNames for freestext resource search and multiple tagNames search 
respectively.

Case 1: Freetext search on resource in service/tags/resources/paginated api
URL - 
/service/tags/resources/paginated?pageSize=5&startIndex=0&tagServiceName=hive&resourceElements=Cust_

Response
{
    "startIndex": 0,
    "pageSize": 5,
    "totalCount": 1,
    "resultSize": 1,
    "sortType": "asc",
    "sortBy": "resourceId",
    "queryTimeMS": 1710997850035,
    "resourceList": [
        {
            "id": 20,
            "guid": "0ad5fe2a-ae82-42ac-8079-7f6a90186f75",
            "isEnabled": true,
            "createdBy": "Admin",
            "updatedBy": "Admin",
            "createTime": 1710997840878,
            "updateTime": 1710997840890,
            "version": 2,
            "serviceName": "hive",
            "resourceElements": {
                "column": {
                    "values": [
                        "name"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "database": {
                    "values": [
                        "Customer"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "table": {
                    "values": [
                        "Cust_Personal_Details"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                }
            },
            "associatedTags": [
                {
                    "id": 30,
                    "guid": "7c2a3070-5046-4352-b427-b38e3973a305",
                    "isEnabled": true,
                    "createdBy": "Admin",
                    "updatedBy": "Admin",
                    "createTime": 1710997840881,
                    "updateTime": 1710997840883,
                    "type": "PII_NAME",
                    "owner": 0
                }
            ]
        }
    ]
}

Case 2: Multiple tagNames search on GET service/tags/resources/paginated api
URL - 
/service/tags/resources/paginated?pageSize=5&startIndex=0&tagServiceName=hive&tagNames=PII_NAME&tagNames=SSN

Response:
{
    "startIndex": 0,
    "pageSize": 5,
    "totalCount": 2,
    "resultSize": 2,
    "sortType": "asc",
    "sortBy": "resourceId",
    "queryTimeMS": 1710997939080,
    "resourceList": [
        {
            "id": 19,
            "guid": "8d9f4f28-a443-4ff7-bfca-dde2af764eab",
            "isEnabled": true,
            "createdBy": "Admin",
            "updatedBy": "Admin",
            "createTime": 1710997450099,
            "updateTime": 1710997450146,
            "version": 3,
            "serviceName": "hive",
            "resourceElements": {
                "column": {
                    "values": [
                        "name"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "database": {
                    "values": [
                        "db1"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "table": {
                    "values": [
                        "employee"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                }
            },
            "associatedTags": [
                {
                    "id": 28,
                    "guid": "229c733c-71c1-45a9-a18a-c6a62dd6b95b",
                    "isEnabled": true,
                    "createdBy": "Admin",
                    "updatedBy": "Admin",
                    "createTime": 1710997450106,
                    "updateTime": 1710997450109,
                    "type": "PII_NAME",
                    "owner": 0
                },
                {
                    "id": 29,
                    "guid": "8027085b-4fe5-45bb-9be2-a8e134218bb9",
                    "isEnabled": true,
                    "createdBy": "Admin",
                    "updatedBy": "Admin",
                    "createTime": 1710997450138,
                    "updateTime": 1710997450140,
                    "type": "SSN",
                    "owner": 0
                }
            ]
        },
        {
            "id": 20,
            "guid": "0ad5fe2a-ae82-42ac-8079-7f6a90186f75",
            "isEnabled": true,
            "createdBy": "Admin",
            "updatedBy": "Admin",
            "createTime": 1710997840878,
            "updateTime": 1710997840890,
            "version": 2,
            "serviceName": "hive",
            "resourceElements": {
                "column": {
                    "values": [
                        "name"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "database": {
                    "values": [
                        "Customer"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "table": {
                    "values": [
                        "Cust_Personal_Details"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                }
            },
            "associatedTags": [
                {
                    "id": 30,
                    "guid": "7c2a3070-5046-4352-b427-b38e3973a305",
                    "isEnabled": true,
                    "createdBy": "Admin",
                    "updatedBy": "Admin",
                    "createTime": 1710997840881,
                    "updateTime": 1710997840883,
                    "type": "PII_NAME",
                    "owner": 0
                }
            ]
        }
    ]
}

Case 3: With Freetext search and mutiple search on tagNames

URL - 
/service/tags/resources/paginated?pageSize=5&startIndex=0&tagServiceName=hive&resourceElements=Cust_&tagNames=PII_NAME&tagNames=SSN

Response:
{
    "startIndex": 0,
    "pageSize": 5,
    "totalCount": 1,
    "resultSize": 1,
    "sortType": "asc",
    "sortBy": "resourceId",
    "queryTimeMS": 1710998019080,
    "resourceList": [
        {
            "id": 20,
            "guid": "0ad5fe2a-ae82-42ac-8079-7f6a90186f75",
            "isEnabled": true,
            "createdBy": "Admin",
            "updatedBy": "Admin",
            "createTime": 1710997840878,
            "updateTime": 1710997840890,
            "version": 2,
            "serviceName": "hive",
            "resourceElements": {
                "column": {
                    "values": [
                        "name"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "database": {
                    "values": [
                        "Customer"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                },
                "table": {
                    "values": [
                        "Cust_Personal_Details"
                    ],
                    "isExcludes": false,
                    "isRecursive": true
                }
            },
            "associatedTags": [
                {
                    "id": 30,
                    "guid": "7c2a3070-5046-4352-b427-b38e3973a305",
                    "isEnabled": true,
                    "createdBy": "Admin",
                    "updatedBy": "Admin",
                    "createTime": 1710997840881,
                    "updateTime": 1710997840883,
                    "type": "PII_NAME",
                    "owner": 0
                }
            ]
        }
    ]
}


Thanks,

Anand Nadar

Reply via email to