Madhan Neethiraj created RANGER-5784:
----------------------------------------

             Summary: add RangerAuthorizer.filterResources() API to return 
authorized resources
                 Key: RANGER-5784
                 URL: https://issues.apache.org/jira/browse/RANGER-5784
             Project: Ranger
          Issue Type: Improvement
          Components: authz-api
            Reporter: Madhan Neethiraj


Add a new {{RangerAuthorizer}} method that accepts a user, a list of candidate 
resources, and required permissions, and returns only the resources on which 
the user has specified permissions. This supports common application flows such 
as listing tables/files/topics the user may access without requiring the caller 
to invoke {{authorize()}} or {{authorizeMulti()}} per resource and filter 
results client-side.
h3. Proposed API:
{code:java}
RangerFilterResourcesResult filterResources(RangerFilterResourcesRequest 
request) throws RangerAuthzException;
{code}
 

{{RangerFilterResourcesRequest}}
||Field||Type||Required||Description||
|{{requestId}}|{{String}}|No|Correlation id for audit/tracing|
|{{user}}|{{RangerUserInfo}}|Yes|User, groups, roles, attributes|
|{{resources}}|{{List<RangerResourceInfo>}}|Yes|Candidate resources to evaluate|
|{{permissions}}|{{Set<String>}}|Yes|Permissions to check (e.g. {{{}select{}}}, 
{{{}read{}}})|
|{{action}}|{{String}}|No|Audit-only label (same semantics as 
{{{}RangerAccessInfo.action{}}})|
|{{context}}|{{RangerAccessContext}}|Yes|Service name/type, access time, client 
IP, etc.|

{{}}

{{RangerFilterResourcesResult}}
||Field||Type||Description||
|{{requestId}}|{{String}}|Echo from request|
|{{resources}}|{{List<RangerResourceInfo>}}|Subset of input resources where 
user is authorized per {{permissionMatch}}|
h3. Example request
{code:java}
{
  "requestId": "4aa68265-34f1-4115-b026-d88dff292669",
  "user":      { "name": "scott.adams" },
  "resources": [
    { "name": "table:db1.tbl1" },
    { "name": "table:db1.tbl2" },
    { "name": "table:db1.tbl3" }
  ],
  "action": "LIST_TABLES",
  "permissions": [ "_any" ],
  "context": {
    "serviceName":     "dev_hive",
    "accessTime":      1755543894,
    "clientIpAddress": "172.16.27.152"
  }
}
{code}
h3. Example result
{code:java}
{
  "requestId": "4aa68265-34f1-4115-b026-d88dff292669",
  "resources": [
    { "name": "table:db1.tbl1" },
    { "name": "table:db1.tbl3" }
  ]
}
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to