diff --git a/databricks_cli/unity_catalog/api.py b/databricks_cli/unity_catalog/api.py index 2ec2a1bf..c9d66597 100644 --- a/databricks_cli/unity_catalog/api.py +++ b/databricks_cli/unity_catalog/api.py @@ -235,6 +235,9 @@ def list_provider_shares(self, name): def get_permissions(self, sec_type, sec_name): return self.client.get_permissions(sec_type, sec_name) + def get_effective_permissions(self, sec_type, sec_name): + return self.client.get_effective_permissions(sec_type, sec_name) + def update_permissions(self, sec_type, sec_name, diff_spec): return self.client.update_permissions(sec_type, sec_name, diff_spec) diff --git a/databricks_cli/unity_catalog/perms_cli.py b/databricks_cli/unity_catalog/perms_cli.py index ea6e19a3..27334554 100644 --- a/databricks_cli/unity_catalog/perms_cli.py +++ b/databricks_cli/unity_catalog/perms_cli.py @@ -67,19 +67,24 @@ def _get_perm_securable_name_and_type(catalog_name, schema_full_name, table_full @click.option('--external-location', cls=OneOfOption, default=None, one_of=PERMISSIONS_OBJ_TYPES, help='Name of the external location of interest') +@click.option('--effective', is_flag=True, default=False, + help='Get effective permissions (including inherited privileges)') @debug_option @profile_option @eat_exceptions @provide_api_client def get_permissions_cli(api_client, catalog, schema, table, storage_credential, - external_location): + external_location, effective): """ Get permissions on a securable. """ sec_type, sec_name = _get_perm_securable_name_and_type(catalog, schema, table, storage_credential, external_location) - perm_json = UnityCatalogApi(api_client).get_permissions(sec_type, sec_name) + if effective: + perm_json = UnityCatalogApi(api_client).get_effective_permissions(sec_type, sec_name) + else: + perm_json = UnityCatalogApi(api_client).get_permissions(sec_type, sec_name) click.echo(mc_pretty_format(perm_json)) diff --git a/databricks_cli/unity_catalog/uc_service.py b/databricks_cli/unity_catalog/uc_service.py index f19d7cf8..b329f577 100644 --- a/databricks_cli/unity_catalog/uc_service.py +++ b/databricks_cli/unity_catalog/uc_service.py @@ -474,14 +474,23 @@ def list_provider_shares(self, name, headers=None): # Permissions Operations - def _permissions_url(self, sec_type, sec_name): - return '/unity-catalog/permissions/%s/%s' % (sec_type, sec_name) + def _permissions_url(self, sec_type, sec_name, effective=False): + if effective: + return '/unity-catalog/effective-permissions/%s/%s' % (sec_type, sec_name) + else: + return '/unity-catalog/permissions/%s/%s' % (sec_type, sec_name) def get_permissions(self, sec_type, sec_name, headers=None): _data = {} return self.client.perform_query('GET', self._permissions_url(sec_type, sec_name), data=_data, headers=headers) + def get_effective_permissions(self, sec_type, sec_name, headers=None): + _data = {} + return self.client.perform_query('GET', self._permissions_url(sec_type, sec_name, + effective=True), + data=_data, headers=headers) + def update_permissions(self, sec_type, sec_name, perm_diff_spec, headers=None): _data = perm_diff_spec return self.client.perform_query('PATCH', self._permissions_url(sec_type, sec_name),